【问题标题】:How to use unobtrusive JS validation with custom validation attributes in MVC3?如何在 MVC3 中使用带有自定义验证属性的不显眼的 JS 验证?
【发布时间】:2011-07-07 16:45:27
【问题描述】:

我有一个名为 AsteriskRequiredAttribute 的自定义验证属性,它派生自 Required 属性,它的功能只是在文本框字段缺少值时显示星号 (*)。

MVC3 不显眼的 JS 验证似乎与 Required 属性完美配合,但不适用于我的自定义属性 - 没有任何反应。

发生了什么?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 jquery-validate unobtrusive-javascript


    【解决方案1】:

    http://samipoimala.com/it/2010/11/29/unobtrusive-client-validation-in-asp-net-mvc-3/

    事实证明,实现自定义属性确实是一件容易的事。您实现自己的类,该类继承 System.ComponentModel.DataAnnotations.ValidationAttribute 并实现 System.Web.Mvc.IClientValidatable。所以你需要做三件事。

    1) 覆盖 public bool IsValid(object value) 此方法将在服务器上完成验证时运行(例如,如果客户端未启用 javascript)。如果您不需要客户端验证,这就是您需要做的所有事情。

    2) 创建一个继承自 ModelClientValidationRule 的类。这通常非常简单。以下是如何在客户端启用电子邮件验证的示例:

    public class ModelClientValidationEmailRule : ModelClientValidationRule
    {
        public ModelClientValidationEmailRule(string errorMessage)
        {
            base.ErrorMessage = errorMessage;
            base.ValidationType = "email";
        }
    }
    

    3) 实现公共 IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)

    这通常也很容易实现,这是电子邮件验证的示例:

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        yield return new ModelClientValidationEmailRule(FormatErrorMessage(metadata.GetDisplayName()));
    }
    

    这是您编写自己的属性以使用 jQuery Validate 插件上现成的验证规则启用验证所需要做的一切。

    【讨论】:

      猜你喜欢
      • 2011-12-09
      • 2012-03-06
      • 2012-11-16
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多