2013-02-16 2 views
1

Внутри моего класса контроллера у меня есть частный метод, который возвращает зарегистрированного пользователя, который извлекается с использованием User.Identity.Name как paramater, который все в порядке.User.Identity.Name Ссылка на объект требуется для нестатического поля

private static Account GetLoggedUser() 
{ 
    AccountService accService = new AccountService(); 
    Account userAccount = accService.GetAccountByUsername(User.Identity.Name); 
    return userAccount; 
} 

public ActionResult Edit() 
{ 
    var userAccount = GetLoggedUser(); 
... 
} 

Проблема заключается в том, что я получаю эту ошибку на линии User.Identity.Name

Ссылка на объект требуется для не статического поля, метода или свойства «System.Web.Mvc.Controller .User.get '

Ошибка отображается во время компиляции.

+0

можете ли вы перейти в 'User.Identity.Name'? или вы можете получить его с помощью 'PrincipalContect', который вам нужно передать текущему пользователю, вы можете получить его на« уровне страницы », если ваш метод требует имя пользователя в поле« DomainName \\ UserName », которое использует« Split » ("\\") 'Метод на имя и передать значение' string [1] 'значение – MethodMan

ответ

4

Вы вызываете нестатический объект/свойство из статического метода, который они отображаются в одном классе. вам нужно иметь экземпляр класса, прежде чем вы сможете его использовать. или изменить метод на нестатический.

2

У вас нет доступа к членам экземпляра базового класса в статическом методе.

3

Вы извлекаете свойство контроллера в статическом методе ...

Удалить static в методе GetLoggedUser()

от:

private static Account GetLoggedUser() 
{ 
    // your code 
} 

к:

private Account GetLoggedUser() 
{ 
    // your code 
} 
+0

' private Account GetLoggedUser() {} 'в случае, если OP вас не понимает .. Я научился не принимать вещи lol – MethodMan

+0

@DJKRAZE обновлено :)) – bas

+0

+2 не проблема 'bas' Я только что сказал .. Я просто оставил сообщение, где люди буквально предоставляли правильный ответ, как вы это делали .., и OP был похож на« я не знаю », я понимаю, что это единственная причина, по которой я упоминал об этом. Я быстро узнал о «СО», чтобы не предположить ... ваш ответ хороший, между прочим, потому что он фактически обеспечивает правильный ответ, плюс вы показываете OP почему это неправильно, и где он/она сделал свою первоначальную ошибку. – MethodMan

Смежные вопросы