0

我是一个 asp mvc 3 菜鸟,试图修改用户帐户脚手架以保存更多信息。当用户创建帐户时,我想添加其他信息,例如他们的全名和开始日期——而不仅仅是他们的用户名/密码。我将把这些添加的信息存储在数据库的雇员表中。

我在 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,但我到底在哪里做呢?
4

2 回答 2

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
于 2012-08-20T13:26:05.820 回答
0
  1. 代码将运行aspnet_Membership_CreateUser存储过程

  2. Membership.CreateUser重载,并将为不会提供的参数设置默认值。例如,如果您只使用用户名和密码调用 CreateUser,则所有其他参数都将默认为默认值,例如 IsApproved 将为 true。>>在 CreateUser 中输入时,您应该会看到重载选项。您可以使用Just Decompile之类的工具查看“C:\Windows\Microsoft.NET\Framework\v4.0.30319\system.web.dll”中的代码

  3. 有不同的方式来存储额外的数据。看看这个。我更喜欢通过 UserId/Email 地址链接表,并且在创建用户时,我调用 CreateUser,如果成功,则保存附加数据(这是该教程中描述的方法的轻微变化)。您还可以修改/扩展整个会员提供程序,请参阅此链接(实施会员提供程序)此视频教程

于 2012-08-20T13:47:40.523 回答