繁体   English   中英

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

[英]What is happening when ASP.NET MVC 3 Accounts Scaffolding calls Membership.Createuser?

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

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

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

似乎此行调用了SQL Server中的存储过程。 似乎最可能的存储过程是aspnet_Membership_CreateUser。 但是此存储的proc具有13个参数,并且上面的代码传递了8个参数。

  1. 上面显示的VB代码(membership.createuser ...)调用什么存储过程?
  2. 为什么aspnet_Membership_CreateUser和Membership.CreateUser没有相同数量的参数?
  3. 如何修改创建用户代码/存储过程,以根据注册表单中的信息将员工信息添加到EmployeeTable中,然后在用户帐户和Employee记录之间添加链接? 通常,这个想法是将员工信息作为附加参数添加到存储的proc中,然后让存储的proc进行插入/添加id,但是我究竟在哪里打算这样做?

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

'
' 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. 该代码将运行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 /电子邮件地址链接表,并在创建用户时调用CreateUser,如果成功,则保存其他数据(这与该教程中介绍的方法略有不同)。 您还可以修改/扩展整个成员资格提供者,请参阅此链接(实现成员资格提供者)此视频教程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM