【发布时间】:2018-04-09 10:11:09
【问题描述】:
我有一个登录页面,它具有以下模型:
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>
客户端验证根本不起作用,那些<span asp-validation-for="some-property"></span> 根本不起作用;但是<div asp-validation-summary="All"></div> 会,当然,当页面刷新时。
我几乎没有更改 _Layout.cshtml 中的任何内容。我确信 Login.cshtml 顶部的那些脚本在该文件夹中,并且它们被包含在内。
控制器中的表单操作将 LoginFormViewModel 作为参数,一切正常。
我已经覆盖了名称,否则,表单在提交表单时不会绑定到它的模型。 Model.Form.Password 的名称是 Form_Password,它无法在提交时将其映射到模型中,因为在模型中它被称为密码。 所以,我想这一定是个问题,所以必须有另一种方法在提交时将该表单映射到其模型,对吧?
【问题讨论】:
-
因为您使用
name="..."覆盖name属性,所以在任何情况下都不要尝试在使用TagHelpers 时更改name属性 -
您为什么要对
Form属性使用两步设计?这似乎毫无意义,而且您确实会引发各种映射问题。
标签: asp.net-mvc asp.net-core-mvc asp.net-core-2.0