当asp.net MVC验证出错时,如何保留值?

San*_*San 7 c# asp.net-mvc-3

我注意到,如果提交表单时出现错误,则会显示验证错误消息,这很酷.但是,它不会保留我输入的值.实际上,它们已经消失,更糟糕的是,datepicker也无法正常工作.所以,我不能再使用选择器了.所以,我的问题是:

  1. 如何保存我在验证前输入的值?
  2. 如果可能的话,在验证错误发生后重用picker控件的任何方法?

Jes*_*lam 9

假设您将表单值绑定到视图模型,只需在验证失败时将视图模型传递回视图.我们来看一个例子:

视图模型:

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 BeginFormEditorForModel.我们可以使用EditorFor(model => model.UserName)EditorFor(model => model.Password)为好.或者我们可以手动编写HTML.重要的是HTML字段名称与视图模型类中的属性匹配:

<input type="text" name="UserName" />

ASP.NET Mvc会HttpPost自动将表单元素数据绑定到操作中的LoginViewModel .只需将无效模型传递回视图即可填充字段.