2017-02-13 70 views
0

我有一種情況,客戶希望現場要求根據表單中的某些選擇動態更改。更具體地講,我有以下字段:動態需要多個字段

國家(下拉列表),州(下拉列表),地址,城市,郵編

他們需要的是以下邏輯:

if US selected as country 
    state, address, city, zip all required 
else if any other country selected 
    address, city required but state and zip code not required 

如何根據客戶端國家/地區選擇器上選擇的內容動態設置DevExpress控件的IsRequired設置?

+0

發表您的HTML標記的下拉菜單請。 – andrews

+0

考慮一個[foolproof](http://foolproof.codeplex.com/)'[RequiredIf]'屬性或應用於'state'和'zipcode'屬性的類似條件驗證屬性,這樣您可以獲得客戶端和服務器端驗證 –

回答

0

我不能說DevExpress方,但一般來說,你必須放棄內建驗證,而不是自定義驗證。例如,在你的行動,你需要做的僅僅是這樣的:

if (model.Country == "US") 
{ 
    if (String.IsNullOrWhiteSpace(model.State)) 
    { 
     ModelState.AddModelError("State", "State is required"); 
    } 

    if (String.IsNullOrWhiteSpace(model.ZipCode)) 
    { 
     ModelState.AddModelError("ZipCode", "Zip Code is required"); 
    } 
} 

if (ModelState.IsValid) 
{ 
    ... 

然後,你根本就沒有在你的視圖模型適用[Required]這些屬性在所有的,而是要靠這個代碼來驗證他們。如果國家是「美國」,那麼他們將被要求,否則不會。

但是,老實說,這是一些代碼異味,它並不包含客戶端驗證等內容。你可能更喜歡自定義的RequiredIf屬性。你可以通過簡單的搜索找到大量的例子,所以我會把它作爲讀者的練習。

-1

用同樣的方法與可選參數

public void Method(address, city, state = null, zip = null) 
{ 
    //... 
}