C# 如何将ASP.NET MVC默认登录页面更改为通过用户名而不是电子邮件地址登录?

C# 如何将ASP.NET MVC默认登录页面更改为通过用户名而不是电子邮件地址登录?,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我会检查一下我的调查结果,希望你们能想出我下一步该做什么的主意 登录的相关M、V和C如下所示 public class LoginViewModel { [Required] [Display(Name = "Email")] [EmailAddress] public string Email { get; set; } [Required] [DataType(DataType.Password)] [Display(Name = "

我会检查一下我的调查结果,希望你们能想出我下一步该做什么的主意

登录的相关M、V和C如下所示

public class LoginViewModel
{
    [Required]
    [Display(Name = "Email")]
    [EmailAddress]
    public string Email { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }
}

和V到

        @using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
        {
            @Html.AntiForgeryToken()
            @Html.ValidationSummary(true, "", new { @class = "text-danger" })
            <div class="form-group">
                @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" })
                <div class="col-md-10">
                    @Html.TextBoxFor(m => m.UserName, new { @class = "form-control" })
                    @Html.ValidationMessageFor(m => m.UserName, "", new { @class = "text-danger" })
                </div>
            </div>
            <div class="form-group">
                @Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" })
                <div class="col-md-10">
                    @Html.PasswordFor(m => m.Password, new { @class = "form-control" })
                    @Html.ValidationMessageFor(m => m.Password, "", new { @class = "text-danger" })
                </div>
            </div>
            <div class="form-group" style="margin-bottom: 40px;">
                <div class="col-md-10">
                    <div class="checkbox">
                        @Html.CheckBoxFor(m => m.RememberMe)
                        @Html.LabelFor(m => m.RememberMe)
                    </div>
                </div>
            </div>
            <div class="form-group">
                <div class="col-md-10">
                    <input type="submit" value="Log in" class="btn btn-default" style="padding-left: 40px; padding-right: 40px;" />
                </div>
            </div>

        }

但是,一定有更好的办法,对吗

另外,我可能通过修改
LoginViewModel
而搞砸了其他东西,因为MVC模板中的其他代码可能会使用它,并希望它有一个
电子邮件
字段

那么我到底应该在这里做什么呢?我想要最简单的零钱


如果我必须更改PasswordSignInAsync,实现在哪里?我找不到它。

默认模板实现使用电子邮件地址作为用户名,这就是它将
model.email
值发送到
PasswordSignInAsync
函数的原因。假设您使用单独的
电子邮件
用户名
值创建了用户帐户,那么将登录方法更改为:

var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);

同样,这假设您的用户帐户是使用不同的
用户名
电子邮件
值创建的。

默认模板实现使用电子邮件地址作为用户名,这就是它将
model.Email
值发送到
密码签名同步
函数的原因。假设您使用单独的
电子邮件
用户名
值创建了用户帐户,那么将登录方法更改为:

var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);

同样,这假设您的用户帐户是使用不同的
用户名
电子邮件
值创建的。

默认模板实现使用电子邮件地址作为用户名,这就是它将
model.Email
值发送到
密码签名同步
函数的原因。假设您使用单独的
电子邮件
用户名
值创建了用户帐户,那么将登录方法更改为:

var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);

同样,这假设您的用户帐户是使用不同的
用户名
电子邮件
值创建的。

默认模板实现使用电子邮件地址作为用户名,这就是它将
model.Email
值发送到
密码签名同步
函数的原因。假设您使用单独的
电子邮件
用户名
值创建了用户帐户,那么将登录方法更改为:

var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);

再说一遍,这假设您的用户帐户是使用不同的
用户名
电子邮件
值创建的。

PasswordSignInAsync的实现或文档在哪里?PasswordSignInAsync的实现或文档在哪里?PasswordSignInAsync的实现或文档在哪里PasswordSignInAsync的实现或文档?
var email = pingDatabaseAndGetEmailFromUsername(model.UserName);
var result = await SignInManager.PasswordSignInAsync(email, model.Password, model.RememberMe, shouldLockout: false);
var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);