我注意到,如果提交表单时出现错误,则会显示验证错误消息,这很酷.但是,它不会保留我输入的值.实际上,它们已经消失,更糟糕的是,datepicker也无法正常工作.所以,我不能再使用选择器了.所以,我的问题是:
假设您将表单值绑定到视图模型,只需在验证失败时将视图模型传递回视图.我们来看一个例子:
public class ViewModel {
[Required]
public string UserName { get; set; }
[Required, DataType(DataTypes.Password)]
public string Password { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
public class LoginController : Controller {
[HttpGet]
public ActionResult Login() {
return View();
}
[HttpPost]
public ActionResult Login(LoginViewModel model) {
if( ModelState.IsValid ) {
if( Membership.ValidateUser(model.UserName, model.Password) ) {
FormsAuthentication.SetAuthCookie(model.UserName, false);
return Redirect("~/");
}
}
// If we got this far, something went wrong.
// Pass the model back to the view.
return View(model);
}
}
Run Code Online (Sandbox Code Playgroud)
@Html.ValidationSummary()
using(@Html.BeginForm())
{
@Html.EditorForModel()
}
Run Code Online (Sandbox Code Playgroud)
我们写使用的HtmlHelper方法的形式HTML BeginForm和EditorForModel.我们可以使用EditorFor(model => model.UserName)并EditorFor(model => model.Password)为好.或者我们可以手动编写HTML.重要的是HTML字段名称与视图模型类中的属性匹配:
<input type="text" name="UserName" />
ASP.NET Mvc会HttpPost自动将表单元素数据绑定到操作中的LoginViewModel .只需将无效模型传递回视图即可填充字段.