2013-03-02 2 views
6

Новое приложение MVC4 создало таблицу UserProfile:Получить UserId (int) в новом приложении MVC4

UserId (int) | UserName (NVARCHAR)

В контроллере:

string currentUser = User.Identity.Name; // returns UserName 

    var mu1 = Membership.GetUser(); // returns null 

    var mu2 = Membership.GetUser(currentUser); // returns null as well 

Я читал много нитей, и все они говорят о том, Guid, который я даже не имею в пользовательских и членских таблицах.

Есть ли способ получить UserId (int) текущего пользователя?

+0

Зачем вам нужен идентификатор? – andri

+1

@andri, чтобы сохранить объявление FK в другой таблице. – mishap

+0

Почему бы не использовать имя пользователя как FK? Имя пользователя уникально, не так ли? – andri

ответ

0

mu1 и mu2 будут содержать экземпляр MembershipUser, если пользователь успешно прошел аутентификацию. MembershipUser имеет свойство ProviderUserKey типа object, которое будет содержать идентификатор пользователя.

Membership.GetUser() требует, чтобы членствоProvider подключалось к приложению и для аутентификации пользователя; так как вы видите null, это может означать, что одно из вышеупомянутых условий не выполняется.

3

Вы можете получить UserId, как ИНТ с

WebSecurity.GetUserId(User.Identity.Name); 

Дополнительная информация: Вы должны добавить [InitializeSimpleMembership] на вершине класса контроллера, если вы используете другой контроллер, чем AccountController.

12

Убедитесь, что вы добавили [InitializeSimpleMembership] в начало своего контроллера, чтобы он инициализировал простое членство через файл InitializeSimpleMembershipAttribute.cs в каталоге Filters.

Тогда вы можете получить доступ к идентификатор пользователя несколько различных способов:

int mu1 = (int)WebSecurity.CurrentUserId; 
int mu2 = (int)Membership.GetUser().ProviderUserKey; 
+0

My InitializeSimpleMembershipAttribute находится в Filters \ InitializeSimpleMembershipAttribute, поэтому я добавил 'using LeisureServicesTicketingSystem.Filters;' в верхней части моего контроллера, но мой int 'mu1 = (int) WebSecurity.CurrentUserId;' дает мне 'Имя 'Websecurity' не существует в текущем контексте. Поэтому я использовал 'using WebMatrix.WebData;' будет ли это работать? – TykiMikk

0

Вы можете получить UserId

if (Request.IsAuthenticated) 
{ 
    var membership = (SimpleMembershipProvider)Membership.Provider; 
    int idUser = membership.GetUserId(User.Identity.Name); 
} 
Смежные вопросы