ASP.NET MVC2 + Membership

时间:2011-06-04 20:26:22

标签: c# asp.net asp.net-mvc asp.net-mvc-2 asp.net-membership

当新用户刚刚注册到ASP.NET MVC应用程序时,我想在我的用户表中创建用户(我使用默认的ASP.NET MVC日志系统 - 成员资格。我想获得新注册用户的guid并创建用户在我的数据库中将具有相同的guid并保留不同的数据,如姓氏姓氏等。我该怎么办?我怎样才能获得注册人ID?我试图在

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 个答案:

答案 0 :(得分:1)

你可以从MembershipUser获得Guid:

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

MSDN:

  

ProviderUserKey属性公开   来自会员的标识符   数据源键入为对象。类型   标识符取决于   会员提供者或   的MembershipUser。在的情况下   SqlMembershipProvider ,.   ProviderUserKey可以作为Guid进行投射,   因为SqlMembershipProvider存储   用户标识符为   唯一标识符

答案 1 :(得分:1)

您无法在正在尝试的方法中获得该值。除非您使用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按住MembershipUserthis.UserGuid即可获取用户ID。