2011-03-24 124 views
1

應用程序中的每個表單都有一組單選按鈕。一旦選定,只有與該單選按鈕相關的某些字段需要驗證。MVC3有選擇地驗證客戶端

我使用的是MVC 3,需要驗證才能運行客戶端。

  1. 只需使用DataAnnotations我只能驗證窗體上的所有字段。

  2. IValidatableObject不起作用的客戶端。

  3. IClientValidatable看起來像它可能做的工作,但似乎我將不得不爲每個標準的DataAnnotation屬性編寫一個新的屬性。

  4. RemoteValidation一次只能處理一個字段。

  5. 另一種選擇是放棄MVC3驗證,並使用jQuery完成所有操作。我對此沒有任何問題,但希望使用MVC3並減少編碼/維護,爲更大的項目做準備。

  6. 我仍然可以使用MVC3驗證,但隨後使用jQuery從驗證中添加/刪除驗證字段,無論何時選擇單選按鈕?

如果任何人都可以提出一些建議,以接近這一點的最好辦法幫助,這將是大加讚賞。

回答

3

默認情況下,MVC 3使用jQuery的驗證插件,該插件不會驗證禁用的字段。如果選擇某些單選按鈕,您不想驗證的字段不再需要嗎?如果是這樣,那麼你可以禁用這些元素,它們將不會被驗證(並且注意那些禁用的字段也不會被髮布到服務器)。

例如$('input')。attr('disabled','disabled');

1

對於複雜的驗證,最好手工編寫這些代碼。 數據註釋非常適合您90%的驗證需求,但會對What/If場景造成不利影響。

對於客戶端使用通過jQuery驗證插件呈現的事件驅動的自定義驗證。對於服務器,使用CustomValidation屬性:

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.customvalidationattribute(v=vs.95).aspx

使用IClientValidatable是偉大的,如果你有可重複使用的自定義驗證,但它是浪費時間一次性驗證。

或者使用RemotValidation和使多個字段無效的CustomValidation屬性。