asp.net MVC - 基于客户端验证条件的自定义验证

时间:2013-12-20 09:39:03

标签: asp.net-mvc-4 data-annotations customvalidator

我需要根据特定条件更改项目的正则表达式。

例如:我需要根据国家/地区选择更改邮政编码字段的正则表达式。

以下是我对Zip代码作为模型中的默认值,适用于美国:

[RegularExpression(@"(^\d{5}(-\d{4})?$)|(^[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1} *\d{1}[A-Z]{1}\d{1}$)", ErrorMessage="Enter valid Zip Code")]
public string Zip { get; set; }

当国家/地区为加拿大时,我需要更改邮政编码的正则表达式:

@"^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$"

只有当用户登录应用程序时,我才能获得国家/地区。如何根据所选的国家/地区以编程方式更改邮政编码的正则表达式?同样,还有更多字段需要根据Country更改正则表达式。它也应该有客户端验证。请建议

2 个答案:

答案 0 :(得分:0)

您可以在C#中编写自定义验证属性,然后在$.validator中添加客户端验证。您可以使用this link(我认为这是关于MVC中自定义验证的非常有用的文章)

答案 1 :(得分:0)

我想我会使用RemoteValidation属性:

[Remote("IsZipValid", "SomeController", AdditionalFields = "UserCountry")]
public string Zip { get; set; }

并将用户所在国家/地区作为附加参数传递。

public JsonResult IsZipValid(
            string zip,
            string userCountry)
{
         // Now you can get the appropriate Regex based on the user's country
        // and return true / false.
}

您还提到您只有在登录后才知道用户所在国家/地区,因此您可能甚至不需要其他参数,因为服务器会知道用户能够获得该国家/地区。

当用户输入邮政编码并将其国家作为参数传递时,这将从网页发送AJAX请求。