如何在 MVC3 中使用带有自定义验证属性的不显眼的 JS 验证?

发布于 2024-10-20 04:33:26 字数 219 浏览 6 评论 0原文

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

MVC3 不显眼的 JS 验证似乎在使用 Required 属性时可以完美地工作,但对于我的自定义属性则不然 - 什么也没有发生。

发生什么?

I have this custom validation attribute called AsteriskRequiredAttribute which derives from the Required attribute and it's function is only to show an asterisk (*) when textbox field lacks value.

MVC3's unobtrusive JS validation seems to work perfectly out of the bow with the Required attribute but not with my custom attribute - nothing happens.

What goes?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

海之角 2024-10-27 04:33:26

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(对象值)
当服务器上完成验证时(例如,如果客户端没有启用 javascript),将运行此方法。如果您不需要客户端验证,这就是您需要做的全部事情。

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

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

3) 实现 public IEnumerable GetClientValidationRules(ModelMetadatametadata, ControllerContext context)

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

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

这就是编写您的自己的属性来使用 jQuery Validate 插件上的现成验证规则启用验证。

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

It turns out that implementing a custom attribute is really an easy task. You implement your own class that inherits System.ComponentModel.DataAnnotations.ValidationAttribute and implements System.Web.Mvc.IClientValidatable. So you need to do three things.

1) Override public bool IsValid(object value)
This method will be run when the validation is done on the server (for example, if the client does not have javascript enabled). This is all you need to do if you don’t need client validation.

2) Create a class that inherits from ModelClientValidationRule. This is usually very simple. Here’s an example how to enable email validation on the client:

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

3) Implement public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context)

This is also usually very easy to implement, here’s the example on email validation:

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

This is all you need do to write your own attribute to enable validation using the readymade validation rules on jQuery Validate plugin.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文