ASP.NET MVC2 + Членство - PullRequest
       13

ASP.NET MVC2 + Членство

0 голосов
/ 05 июня 2011

Я хотел бы создать пользователя в своей пользовательской таблице, когда новый пользователь только что зарегистрировался в приложении ASP.NET MVC (я использую стандартную систему ведения журнала ASP.NET MVC - Членство. Я хочу получить руководство для нового зарегистрированного пользователя и создать Пользователь в моей базе данных, который будет иметь тот же самый гид и хранить там разные данные, такие как имя, фамилия и т. д. Как я могу это сделать? Как я могу просто получить идентификатор зарегистрированного человека? Я пытался сделать это в

public ActionResult Register(RegisterModel model) function in AccountController

но я не знаю, как получить guid только что зарегистрированного пользователя, это не работает:

[HttpPost]
public ActionResult Register(RegisterModel model)
{
    if (ModelState.IsValid)
    {
        // Attempt to register the user
        MembershipCreateStatus createStatus = MembershipService.CreateUser(model.UserName, model.Password, model.Email);

        if (createStatus == MembershipCreateStatus.Success)
        {
            FormsService.SignIn(model.UserName, false /* createPersistentCookie */);

            //string guid = Helpers.getLoggedUserGuid(); //return null

           //if (Request.IsAuthenticated) { } // return false
           //if (System.Web.HttpContext.Current.User.Identity.IsAuthenticated) {} // return false
           //Membership.getUser() // return null
           //The most funny is that after this redirection below the user is logged in - I do not understand it
            return RedirectToAction("Index", "Home");
        }
        else
        {
            ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus));
        }
    }

    // If we got this far, something failed, redisplay form
    ViewData["PasswordLength"] = MembershipService.MinPasswordLength;
    return View(model);
}

Есть ли возможность получить этот гид в этой функции? (Я знаю, что могу получить userName и т. Д., Но не могу понять, почему я не могу получить этот guid)

Ответы [ 2 ]

1 голос
/ 05 июня 2011

Вы не можете получить это значение в методе, который вы пытаетесь. если вы не используете Membership.GetUser()

Что вы должны сделать, это:

создать общий контроллер, например:

public class MainController : Controller
{
    public MembershipUser _user = null;
    public MembershipUser User {
        if(_user == null) _user = Membership.GetUser(model.Username);
        return _user;
    }
    public GUID UserGuid {
        get { return (Guid)User.ProviderUserKey;; }
    }
}

и затем вместо того, чтобы ваши контроллеры были производными от Controller, заставьте их наследовать ваш новый пользовательский контроллер

public class SalesController : MainController

и в любом методе, который вам нужен, вы просто вызываете this.User для удержания MembershipUser или this.UserGuid для получения идентификатора пользователя.

1 голос
/ 05 июня 2011

Вы можете получить Guid из MembershipUser:

var user = Membership.GetUser(model.Username);
var guid = (Guid) user.ProviderUserKey;

MSDN:

Свойство ProviderUserKey предоставляет идентификатор из источника данных членства, типизированного как объект.Тип идентификатора зависит от MembershipProvider или MembershipUser.В случае SqlMembershipProvider ProviderUserKey может быть приведен как Guid, поскольку SqlMembershipProvider хранит идентификатор пользователя в качестве UniqueIdentifier.

...