是否有任何“内置”方式在MVC5中进行特定于字段的服务器端AJAX验证?如果没有,是否有任何助手可以帮助解决这个问题?

时间:2014-03-23 06:29:11

标签: jquery ajax asp.net-mvc validation server-side

我经常发现自己想要在MVC5中动态验证单个表单字段,而我喜欢DataAnnotations我不认为它们提供了一种开箱即用的服务器端验证方法。

我意识到无论如何都会在提交时执行验证,但有些字段,例如username,用户应该能够即时查看它们是否有效。所以我继续编写jQuery / Javascript代码来检查$.ajax或类似的这些字段,这是很多样板代码编写。 IE,在触发相应事件(输入已更改)后,客户端调用服务器,然后使用复选标记(如果有效)更新字段右侧的验证占位符,如果无效则更新错误图像。

更令我烦恼的是没有静态类型检查,因此在运行之前我不会知道任何令人震惊的语法错误(即错误拼写的div id)。

我想知道:

  1. 是否可以编写一个自定义属性,该属性将在提交时调用服务器(就像它对[Required]字段一样,除非它需要从服务器获取响应才能继续)?这将是最好的选择。
  2. 是否有任何内置帮助程序可以在某些适当的偶数(例如Ajax)上进行onChange调用,然后在获取结果后更新div?
  3. 如果您是ASP.NET MVC开发人员,过去如何处理此问题?我不想继续编写样板文件javascript。我知道javascript是不可避免的,但这似乎是一个通用的问题,可以编写这样的帮助。
  4. 提前感谢任何建议。

1 个答案:

答案 0 :(得分:0)

您可以使用 RemoteAttribute

您可以在每次值更改时指定要在控制器上调用的方法,如果有效,则返回true;如果不是,则返回错误消息。

在你的模特中:

[Remote("IsUserNameUnique", "User")]
public string UserName { get; set; }

控制器:

public class UserController : Controller
{
    public JsonResult IsUserNameUnique(string UserName)
    {
       if(isUnique(UserName))
          return Json(true,JsonRequestBehavior.AllowGet);
       else 
          retuen Json("Username is taken.",JsonRequestBehavior.AllowGet)
    }
}

如果您的观点刚刚提出

@Html.ValidationMessageFor(model=>model.UserName)