asp.net-mvc-3 - ASP.MVC3 ModelState.IsValid 不包括 RemoteAttribute 检查

标签 asp.net-mvc-3

我将变量定义为

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

在主 Controller 中

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

但是当我在“保存”操作中检查 ModelState.IsValid 时,即使我可以在 View 上看到错误消息显示,它也始终返回 true。

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 的验证规则?

最佳答案

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

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

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

关于asp.net-mvc-3 - ASP.MVC3 ModelState.IsValid 不包括 RemoteAttribute 检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9077469/

相关文章:

asp.net-mvc-3 - 您可以在 ASP.net MVC3 中使用嵌套 View 模型吗?

asp.net-mvc-3 - 在 .Net MVC3 中如何处理 JqGrid 中的服务器端错误?

asp.net-mvc-3 - 从 ASP MVC 3 Preview 更新到 Beta 后表单提交了两次

c# - 测试函数 "System.Web.Mvc.ViewEngines.Engines.FindPartialView"

asp.net-mvc - 将请求重定向到匹配的 Controller

asp.net-mvc-3 - 如何为由Data-First自动创建的实体添加数据注释?

asp.net-mvc-3 - 如何在ASP.Net MVC中设置一个CheckBox默认选中

asp.net-mvc - 为什么 SelectList SelectedValue 在 HttpGet 上有效,但在 HttpPost 上无效?

jquery - ASP.NET MVC 3 的非侵入式客户端验证需要哪些文件才能正常工作?

c# - 比较 LINQ 中 2 个 DateTime 变量的日期部分与 EF