2011-05-27 136 views
2

我們使用MVC3與unobstructuve驗證,一切都很好;我們在服務器以及客戶端上獲得了自定義驗證。MVC3驗證基於用戶角色

我們也在使用內建的asp.net 角色提供者。我們有特定的觀點,我們用於不同的角色。根據登錄用戶的角色,某些字段(ViewModel的屬性)是必需的。

我的問題是:我們如何製作一個ValidationAttribute基於角色?我們想要創建一個屬性當用戶是普通用戶時需要;但是當用戶是管理員時,我們不想讓該字段成爲必需字段。但我們確實想要使用相同的觀點。

我知道我們能(從創建派生的類ValidationAttribute)創建一個自定義ValidationAttribute我想這將正常工作的服務器端驗證。但我們真的想要驗證這個客戶端。

我認爲我們在上面ValidationAttribute實施IClientValidatable和寫一些jQuery來讓Ajax調用返回到服務器,以檢查登錄的用戶及其角色的電流。 但是這會讓我們在每次特定屬性更改時都會執行Ajax調用,並且登錄用戶不會更改。

這樣做的正確方法是什麼?或者我們應該爲不同的登錄用戶創建不同的ViewModels

請讓我知道,當我的上述解釋沒有道理時,我可以在需要時添加一些示例代碼。

任何幫助表示讚賞。

感謝,

皮姆

回答

0

我覺得你確實可以實現自定義ValidationAttribute也實現了IClientValidatable。但你可能只是「再利用」的客戶端不顯眼的要求驗證:

public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
     { 
      if (<your condition, e.g. if user has a certain role>) 
       yield return new ModelClientValidationRequiredRule(<error message>); 
     } 

這應該產生的輸入作爲RequiredAttribute標籤相同的不顯眼的必需的屬性,但只有當你的條件得到滿足。

+0

謝謝!這正是我所追求的。 – Pim 2011-05-29 23:54:59