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的嵌套属性,因为它不是整个页面的数据,而是表单的数据。控制器操作应仅采用该形式,而不是整个视图模型。