2013-12-20 98 views
0

我需要根據特定條件更改項目的正則表達式。asp.net MVC - 基於客戶端驗證條件的自定義驗證

例如:我需要根據國家選擇更改郵政編碼字段的正則表達式。

下面是我的郵編爲模型內部的默認,這對美國是適用的:

[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)$" 

只有當用戶登錄到應用程序時,我才能獲取國家/地區。如何根據所選國家/地區以編程方式更改郵政編碼的正則表達式?同樣,還有更多的字段需要根據國家/地區修改正則表達式。它也應該有客戶端驗證。請建議

回答

0

您可以在C#中編寫自定義驗證屬性,然後在$.validator中添加客戶端驗證。您可以使用this link(我認爲這是關於MVC定製驗證非常有用的文章)

+0

我只需要替換一些字段的正則表達式。有沒有簡單的方法來替換正則表達式,而不是爲每個字段編寫自定義驗證器? – Prasad

+0

@Prasad,我認爲你不能在運行時改變屬性值 – idlerboris

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請求。