2012-02-15 96 views
0

我有一個MVC3應用程序,使用EF,其中一張桌子在很多視圖模型中。它有一個通常不需要的字段。但是,有一種情況(和一種觀點)需要它。我希望客戶端和服務器驗證這個字段的必要性,在需要的地方。添加臨時不顯眼的驗證

現在,我不想將Required數據註釋放在字段上,因爲那樣它將始終是必需的。即使在未顯示編輯字段的視圖中,情況也是如此,這將導致用戶無法離開的驗證消息。

我也不是在尋找RequiredIf驗證屬性,因爲這不符合設計。該字段只在一種情況下需要,我不想在所有視圖模型中從一個多餘的表中粘貼額外的字段,只是爲了依賴。

我想要的就是能夠在一個視圖中打開一個字段所需的字段驗證,以特別的,不基於DataAnnotations的方式。

立即向我建議的方式是在爲字段創建標記時(通過HtmlHelper.TextBoxFor簽名末尾的HtmlAttributes對象)指定必需的data-val-*屬性。如果我理解正確,這應該提示JS不引人注意的驗證來根據需要處理該字段。

但是這是......有點太過分了,在我看來。不顯眼的驗證支持會侵入到更高級別的代碼中。有沒有更優雅的方式來做到這一點?我可以使用jQuery Validation函數調用來實現我想要發生的事情嗎?

回答

0

data-val方法不僅具有代碼異味,而且也是不可靠的,因爲最終用戶可能使用的客戶端不會執行不顯眼的驗證。客戶端驗證是糖果,這很好。您必須始終具有服務器端驗證。

這是您在爲視圖模型使用數據模型時遇到的問題。正確的方法是爲每個視圖創建獨立的視圖模型。您可以通過共享「查看模型」並僅爲那些不同的視圖創建單獨的視圖模型。在任何一種情況下,如果您有獨特的視圖,它需要自己獨特的視圖模型。

+0

同意重新編碼的味道,需要進行服務器端驗證。思考我的應用程序對其餘的影響。不過,非常感謝。 – 2012-02-15 17:58:02

相關問題