ASP.MVC3 ModelState.IsValid不包括RemoteAttribute检查

时间:2012-01-31 09:54:48

标签: asp.net-mvc-3 validation modelstate unobtrusive

我将变量定义为

public class EditModel
{
    [Remote("IsNameAvailable", "Home", ErrorMessage = "Name is in use.")]
    [Display(Name = "Name")]
    public string Name{ get; set; }
}

并在家庭控制器中

public JsonResult IsNameAvailable(string name)
{
    if (duplicate)
        return Json(false, JsonRequestBehavior.AllowGet);
    else
        return Json(true, JsonRequestBehavior.AllowGet);
}

但是当我在Save操作中检查ModelState.IsValid时,它总是返回true,即使我可以在View上看到错误信息显示。

public ActionResult Save(EditModel editModel)
{
   if (!ModelState.IsValid)
   {
       //Return to view and display error in view
       return View("Home", editModel);
   }

   //Input data is valid and save record
   Repository.Save(editModel.Name);
}

[问题]
ModelState如何在模型中检查RemoteAttribure的验证规则?

1 个答案:

答案 0 :(得分:2)

你有两个选择。您可以实现IDataErrorInfo或IValidatableObject接口,并在那里重做验证。这些接口由MVC开箱即用,您的ModelState将反映这一点。

您的另一个选择是创建自己的属性,该属性派生自RemoteAttribute。在此自定义属性中,添加用于应用相同验证服务器端的逻辑。

最后一个选项是我想要的选项,但确实需要花费更多时间。 This question应该可以帮助你。