是否可以在MVC中禁用单个模型属性的客户端验证

时间:2014-06-16 16:41:41

标签: c# javascript asp.net-mvc validation

我有一个MVC 4模型,并使用@ Html.TextBoxFor在视图中创建html。在其中一个字段的模型中,我有一个RegularExpression属性,定义如下:

[Required(ErrorMessageResourceType=typeof(ResourceFile), ErrorMessageResourceName="ResourceName1"
[RegularExpression(@"\w{3,5}", ErrorMessageResourceType=typeof(ResourceFile), ErrorMessageResourceName="ResourceName2")]
public string TestProperty { get; set; }

注意表达式比这更复杂,但我在这里的内容适合测试。我已经设置了不引人注意的客户端验证,如下所述:http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html

我遇到的问题是我需要接受俄语字符。 .Net的正则表达式对于\ j到javascript的正则表达式具有不同的含义,因此服务器端验证的工作方式和我预期的一样,而客户端则没有。

是否可以关闭RegularExpression属性的客户端验证而不关闭Required属性?

如果失败,可以在不关闭该模型对象上所有其他属性的情况下关闭此单个属性的客户端验证吗?

1 个答案:

答案 0 :(得分:6)

仅为正则表达式属性创建自己的服务器端。从RegularExpressionAttribute派生它,但不实现IClientValidatable。您只需要实现构造函数。如果没有IClientValidatable,客户端验证器将不会被连线。由于此属性只是正则表达式属性,因此所有服务器端验证将继续按RegularExpressionAttribute的提供工作。

public class ServerSideOnlyRegularExpressionAttribute : RegularExpressionAttribute
{
    public ServerSideOnlyRegularExpressionAttribute(string pattern)
        : base(pattern)
    {
    }
}

将其用作

[Required(ErrorMessageResourceType=typeof(ResourceFile), ErrorMessageResourceName="ResourceName1"
[ServerSideOnlyRegularExpression(@"\w{3,5}", ErrorMessageResourceType=typeof(ResourceFile), ErrorMessageResourceName="ResourceName2")]
public string TestProperty { get; set; }