【问题标题】:Is there any "built-in" way to do field-specific, server-side AJAX validation in MVC5? If not, are there any helpers that can assist with this?是否有任何“内置”方法可以在 MVC5 中进行特定于字段的服务器端 AJAX 验证?如果没有,是否有任何帮助者可以提供帮助?
【发布时间】:2014-03-23 06:29:11
【问题描述】:

我经常发现自己想在 MVC5 中即时验证单个表单字段,虽然我喜欢 DataAnnotations,但我认为它们不能提供开箱即用的服务器端验证方法。

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

更困扰我的是没有静态类型检查,所以直到运行时我才知道任何严重的语法错误(即拼写错误的 div id)。

我想知道:

  1. 是否可以编写一个在提交时调用服务器的自定义属性(就像它对[Required] 字段一样,除了它需要从服务器获得响应才能继续)?这将是最好的选择。
  2. 是否有任何内置助手可以在某些适当的情况下(例如,onChange)发出 Ajax 调用,然后在获取结果后更新 div?
  3. 如果您是 ASP.NET MVC 开发人员,您过去是如何解决这个问题的?我不想继续编写样板 javascript。我知道 javascript 是不可避免的,但这似乎是一个足够通用的问题,可以编写这样的帮助程序。

提前感谢您的任何建议。

【问题讨论】:

  • 在你的控制器中检查ModelState.IsValid
  • @Jasen,我使用 ModelState.IsValid 检查已发布的表单,但我想了解特定字段的模型验证 - 例如,我只会通过 RegistrationFormModel 的用户名部分发送,不一定是全部。我正在尝试查看 MVC 中是否有解决此问题的通用方法

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


【解决方案1】:

您可以使用 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 2011-08-08
    • 2010-10-12
    • 2021-06-16
    • 2010-11-12
    • 2013-09-04
    • 1970-01-01
    相关资源
    最近更新 更多