如何在_LoginPartial.cshtml中获取UserName(而不是电子邮件)? - ASP.NET身份

时间:2015-07-06 12:46:15

标签: c# asp.net-mvc asp.net-identity

我试着这样做:

User.Identity.GetUserName()

并且像这样:

User.Identity.Name

但我收到的是电子邮件,而不是UserName属性。

1 个答案:

答案 0 :(得分:1)

您无需在_LoginPartial.cshtml文件中更改内容。而是在AccountController中更改您的注册帖子

    public async Task<IActionResult> Register(RegisterViewModel model, string returnUrl = null)
    {
        ViewData["ReturnUrl"] = returnUrl;
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser { UserName = model.Email, Email = model.Email };

到此:

    public async Task<IActionResult> Register(RegisterViewModel model, string returnUrl = null)
    {
        ViewData["ReturnUrl"] = returnUrl;
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser { UserName = model.UserName, Email = model.Email };

请记住,如果您已经运行了第一个代码并将试用用户注册到您的数据库中,那么UserName将设置为Email,因此要么从AspNetUser表中删除该条目,要么适当地更新UserName和NormalizedUserName字段。

更新:如此处所述gethub,Entity API会检查针对NormalizedUserName的登录。因此,当您在RegisterViewModel上为用户提供输入非电子邮件的值时,您需要在LoginViewModel中删除[EmailAddress]验证。