2016-03-14 65 views
-1

如果我沒有弄錯,遠程屬性驗證在Value Change上執行,所以它不需要您按Submit,但Custom Attribute要求我們編寫JQuery來調用適配器什麼時候應該有人使用遠程屬性與自定義屬性

所以我的問題是爲什麼不使用遠程屬性所有的時間?

+2

'RemoteAttribute'用於調用控制器方法來執行驗證。如果可以在使用javascript的客戶端上執行驗證,則不會這樣做(出於性能原因) –

+0

確定您對此有所瞭解,但我正在談論CustomAttribute以及客戶端驗證。 – Stacker

+0

對不起,我不明白你的意見。如果您的自定義ValidationAttribute實現了'IClientValidatable',那麼您將必要的方法添加到'jQuery.validator'中,以便您可以在客戶端上執行客戶端驗證。使用'RemoteAttribute'只會大大降低性能(並不會給你最重要的服務器端驗證) –

回答

2

RemoteAttribute的主要目的是在控制器中執行驗證邏輯,同時保持在同一頁面上。當您需要訪問外部資源時,通常會使用它(例如,在註冊時檢查新用戶是否沒有使用現有的用戶名),但也可能是因爲邏輯非常複雜,不值得複製/將其保存在客戶端腳本中。

關於RemoteAttribute需要考慮兩件重要的事情。

  1. 它使用ajax調用服務器端方法。最初, Ajax調用在.blur()事件編輯控制, 但此後每.keyup()事件,以便使用 RemoteAttribute將是一個性能命中
  2. 它只提供客戶端驗證(它應該永遠只能是 考慮後作出一個不錯的獎金),你仍然需要再實現服務器 端驗證,以防止惡意用戶繞過客戶端 端驗證

如果你寫字的地方可以使用JavaScript執行的驗證邏輯自定義驗證屬性,那麼你的屬性應該從ValidationAttribute繼承,並實現IClientValidatable(並且包含必要的腳本來添加客戶端規則),這樣你就可以同時獲得客戶端和服務器端的驗證,而不會對服務器進行不必要的調用。

請參閱The Complete Guide to Validation in ASP.NET MVC 3 - Part 2瞭解實現自定義驗證屬性的好文章。

相關問題