C# 如何在_LoginPartial.cshtml中获取用户名(而不是电子邮件?-ASP.NET标识

C# 如何在_LoginPartial.cshtml中获取用户名(而不是电子邮件?-ASP.NET标识,c#,asp.net-mvc,asp.net-identity,C#,Asp.net Mvc,Asp.net Identity,我试着这样做: User.Identity.GetUserName() User.Identity.Name 就像这样: User.Identity.GetUserName() User.Identity.Name 但是我收到的是电子邮件,而不是用户名属性。您不需要更改_LoginPartial.cshtml文件中的任何内容。相反,在AccountController中,从 public async Task<IActionResult> Register(Regis

我试着这样做:

User.Identity.GetUserName()
User.Identity.Name
就像这样:

User.Identity.GetUserName()
User.Identity.Name

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

您不需要更改_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 };
公共异步任务寄存器(RegisterViewModel模型,字符串returnUrl=null) { ViewData[“ReturnUrl”]=ReturnUrl; if(ModelState.IsValid) { var user=newapplicationuser{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 };
公共异步任务寄存器(RegisterViewModel模型,字符串returnUrl=null) { ViewData[“ReturnUrl”]=ReturnUrl; if(ModelState.IsValid) { var user=newapplicationuser{UserName=model.UserName,Email=model.Email}; 请记住,如果您已经运行了第一个代码并在DB中注册了试用用户,则用户名将设置为电子邮件,因此请从AspNetUser表中删除该条目,或者适当地更新用户名和NormalizedUserName字段


更新:如本文所述,实体API根据NormalizedUserName检查登录。因此,当您向RegisterViewModel上的用户提供一个非电子邮件的值时,您需要删除该[EmailAddress]LoginViewModel中的验证。

听起来他们的电子邮件地址就是他们的用户名。我的数据库中有用户名和电子邮件字段,它们的值不同。用户名:测试,电子邮件:test@test.test有没有办法通过User.Identity获取UserName属性?如果您正在调用
GetUserName()
您将获得
test@test.com
,然后
test@test.com
可能是ASP.NET identity用作用户名的名称。ASP.NET identity不知道如何连接到数据库并自动检索其他值。是否无法在
\u LoginPartial.cshtml
中使用
@model
我做错什么了吗?