Asp.net mvc 客户端验证不需要';t在ASP.NET核心MVC应用程序中工作

Asp.net mvc 客户端验证不需要';t在ASP.NET核心MVC应用程序中工作,asp.net-mvc,asp.net-core-mvc,asp.net-core-2.0,Asp.net Mvc,Asp.net Core Mvc,Asp.net Core 2.0,我有一个具有以下模型的登录页面: public class LoginViewModel : BaseViewModel { public LoginFormViewModel Form { get; set; } } public class LoginFormViewModel { [Required] public string UserName { get; set; } [Required] [DataType(DataType.Passwor

我有一个具有以下模型的登录页面:

public class LoginViewModel : BaseViewModel
{
    public LoginFormViewModel Form { get; set; }
}
public class LoginFormViewModel
{
    [Required]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.Password)]
    public string Password { get; set; }

    [Required]
    public bool RememberMe { get; set; }
}
这是html页面:

@model SocialNetwork.Web.ViewModels.LoginViewModel

@section scripts {
    <script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
    <script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
}

<h2>Login</h2>

<style>
    #btn-login {
        float: left;
        margin-left: 14px;
    }

    #checkbox-remember-me {
        margin-right: 15px;
    }
</style>

<div class="col-md-offset-2 col-md-4">
    <form asp-action="Login">
        <div class="row">
            <div>
                <div class="form-group col-md-12">
                    <label asp-for="Form.UserName"></label>
                    <input asp-for="Form.UserName" name="UserName" class="form-control">
                    <span asp-validation-for="Form.UserName"></span>
                </div>
            </div>
        </div>
        <div class="row">
            <div>
                <div class="form-group col-md-12">
                    <label asp-for="Form.Password"></label>
                    <input asp-for="Form.Password" name="Password" class="form-control">
                    <span asp-validation-for="Form.Password"></span>
                </div>
            </div>
        </div>
        <div asp-validation-summary="All"></div>
        <div class="row">
            <div class="checkbox pull-right" id="checkbox-remember-me">
                <label>
                    <input asp-for="Form.RememberMe" name="RememberMe">
                    Remember me
                </label>
            </div>
            <button type="submit" id="btn-login" class="btn btn btn-primary">
                Log In
            </button>
        </div>
    </form>
</div>
@model SocialNetwork.Web.ViewModels.LoginViewModel
@节脚本{
}
登录
#btn登录{
浮动:左;
左边距:14px;
}
#还记得我吗{
右边距:15px;
}
记得我吗
登录
客户端验证根本不起作用,那些
根本不起作用;当然,当页面刷新时,
确实如此

在我的_Layout.cshtml中,我几乎没有更改任何内容。我确信Login.cshtml顶部的那些脚本都在该文件夹中,并且它们都包含在其中

控制器中的forms操作以LoginFormViewModel作为参数,并且一切正常

我已经重写了这个名称,因为在表单提交时表单没有绑定到它的模型。Model.Form.Password的名称是Form_Password,提交时它无法将其映射到模型中,因为在模型中它被称为Password。
因此,我想这一定是个问题,因此必须有另一种方法在提交时将表单映射到其模型,对吗?

不确定从何处获取form.Property,但这是它应该工作的方式

但是模型应该是这样的

public class LoginViewModel : BaseViewModel
{    
    [Required]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.Password)]
    public string Password { get; set; }

    [Required]
    public bool RememberMe { get; set; }
}
以及相关的html

<form asp-route-returnurl="@ViewData["ReturnUrl"]" method="post">
            <h4>Use a local account to log in.</h4>
            <hr />
            <div asp-validation-summary="All" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="UseName"></label>
                <input asp-for="UserName" class="form-control" />
                <span asp-validation-for="UserName" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Password"></label>
                <input asp-for="Password" class="form-control" />
                <span asp-validation-for="Password" class="text-danger"></span>
            </div>
            <div class="form-group">
                <div class="checkbox">
                    <label asp-for="RememberMe">
                        <input asp-for="RememberMe" />
                        @Html.DisplayNameFor(m => m.RememberMe)
                    </label>
                </div>
            </div>
            <div class="form-group">
                <button type="submit" class="btn btn-default">Log in</button>
            </div>

        </form>

使用本地帐户登录。

@DisplayNameFor(m=>m.RememberMe) 登录
asp标记帮助程序使用您在视图中使用的模型的属性。

确保添加

app.UseStaticFiles(); //in Configure() method of StartUp.cs class

因为您使用
name=“…”
来覆盖
name
属性,所以在任何情况下,在使用标记帮助时都不要尝试更改
name
属性。为什么对
表单
属性使用两步设计?这似乎毫无意义,而且会引发各种映射的问题。这不起作用,因为属性Email和Pasword不在模型的根中,而是在它的Form属性中。Edited…没有注意到ops顶部的模型,但我不想这样做,我希望表单嵌套在model@Scarass...why,这可能有什么好处?您正在破坏KISS习惯用法。因为它属于名为Form的嵌套属性,因为它不是整个页面的数据,而是表单的数据。控制器操作应仅采用该形式,而不是整个视图模型。