ASP.NET MVC 3帐户脚手架调用Membership.Createuser时发生了什么?

时间:2012-08-20 13:18:06

标签: asp.net asp.net-mvc-3

我是一个asp mvc 3 noob试图修改用户帐户脚手架来保存更多信息。当用户创建帐户时,我想添加其他信息,例如他们的全名和开始日期 - 而不仅仅是他们的用户名/ pw。我将把这个添加的信息存储在DB的Employees表中。

我看到AccountController中的代码行在用户输入表单输入后创建帐户。

Membership.CreateUser(model.UserName, model.Password, model.Email, Nothing, Nothing, True, Nothing, createStatus)

看起来这行调用SQL Server中的存储过程。似乎最可能的存储过程是aspnet_Membership_CreateUser。但是这个存储过程有13个参数,上面的代码传递了8个参数。

  1. 上面显示的VB代码调用了哪些存储过程(membership.createuser ...)?
  2. 为什么aspnet_Membership_CreateUser和Membership.CreateUser没有相同数量的参数?
  3. 如何根据注册表单中的信息修改创建用户代码/存储过程以将员工信息添加到EmployeeTable中,然后在用户帐户和员工记录之间添加链接?一般来说,我们的想法是将员工信息作为附加参数添加到存储过程中,然后让存储过程执行插入/添加ID,但我到底要做什么呢?

2 个答案:

答案 0 :(得分:0)

我无法回答您的其他问题,但这里是我使用的代码扩展用户注册以包含更多日期(使用配置文件表,而不是配置文件提供程序):

'
' POST: /Account/Register

<HttpPost()> _
Public Function Register(ByVal model As RegisterModel) As ActionResult
    If ModelState.IsValid Then
        ' Attempt to register the user
        Dim createStatus As MembershipCreateStatus
        Dim MembershipUser = Membership.CreateUser(model.UserName, model.Password, model.Email, Nothing, Nothing, True, Nothing, createStatus)

        If createStatus = MembershipCreateStatus.Success Then

            Dim providerKeyObject = MembershipUser.ProviderUserKey
            Dim providerKeyGuid = MembershipUser.ProviderUserKey

            ' update profile entity
            Dim db As UserProfileDbContext = New UserProfileDbContext
            Dim profile As New UserProfile
            profile.UserId = providerKeyGuid
            profile.IsCompanyOwner = True
            profile.CompanyId = model.Company
            profile.BlogId = model.Blog
            profile.IsCompanyOwner = model.IsCompanyOwner
            profile.IsBlogOwner = model.IsBlogOwner

            db.UserProfiles.Add(profile)
            db.SaveChanges()

            FormsAuthentication.SetAuthCookie(model.UserName, False)

            ' send email
            ' TODO: fix error on send
            Call New EmailController().VerificationEmail(model).Deliver()

            Return RedirectToAction("Index", "Home")

        Else

            ModelState.AddModelError("", ErrorCodeToString(createStatus))

        End If
    End If

    ' If we got this far, something failed, redisplay form
    Return View(model)
End Function

答案 1 :(得分:0)

  1. 代码将运行aspnet_Membership_CreateUser存储过程

  2. Membership.CreateUser已重载,并将为未提供的参数设置默认值。例如,如果您仅使用用户名和密码调用CreateUser,则所有其他参数将被默认,例如IsApproved将是真的。 &gt;&gt;在CreateUser中键入时,您应该看到重载选项。您可以使用Just Decompile

  3. 等工具查看“C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ system.web.dll”中的代码
  4. 存储其他数据的方法有很多种。 Look at this one。我更喜欢用UserId / Email地址链接表格,在创建用户时,我调用CreateUser,如果成功,则保存附加数据(这是该教程中描述的方法的略微变化)。您还可以修改/扩展整个会员提供商,请参阅this link (Implementing a Membership Provider)this video tutorial