【问题标题】:Is it possible to disable client side validation for a single model property in MVC是否可以在 MVC 中禁用单个模型属性的客户端验证
【发布时间】:2014-08-06 13:24:12
【问题描述】:

我有一个 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 的正则表达式对于 \w 与 javascript 的正则表达式有不同的含义,因此服务器端验证按我的预期工作,而客户端则没有。

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

如果不关闭该模型对象上的所有其他属性,是否可以只关闭此单个属性的客户端验证?

【问题讨论】:

  • 您可以删除正则表达式属性并手动验证吗?
  • 当然可以,但我希望有比这更好的解决方案。
  • 我认为您将不得不推出自己的验证,推出自己的自定义属性,以考虑俄语或修改正则表达式以匹配您要匹配的内容。

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


【解决方案1】:

创建您自己的服务器端唯一的正则表达式属性。从 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; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 2013-11-12
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 2014-11-03
    • 2018-04-05
    相关资源
    最近更新 更多