2012-03-29 67 views
0

我需要從動態內容創建MVC3中的html。我的方案是我需要創建一個視圖,可以根據用戶和環境更改顯示的html字段。直到我們準備檢索它們以供使用並且可以改變時,字段的可能範圍纔是已知的。這個基本功能在MVC中相當簡單。但是,我想使用不引人注意的客戶端驗證,這是我的問題出現的地方。MVC3不顯示數據註釋的不顯眼驗證

這是場景:我有一個模型中的複雜類型列表。複雜類型實例存儲關於需要創建的html字段的元數據。例如,複雜類型有一個DataType字符串屬性,告訴我們要創建的html元素類型。文本框輸入元素的「文本」,複選框輸入元素的「複選框」,選擇元素的「選擇」等等。複雜類型具有Readonly,IsRequired,Value,Regex,MinLength,MaxLength等屬性......它包含我們需要創建一系列HTML元素並對這些元素進行驗證的所有內容。

所以複雜類型的列表被插入我們的控制器模型中,然後我們調用我們的視圖。該視圖需要顯示適當的html元素,並考慮複雜類型中列表中每個複雜類型的設置。這可以通過創建一個新的幫助程序來管理複雜類型或在視圖的循環中具有switch語句來實現,該語句檢查複雜類型的DataType並使用適當的幫助程序。到現在爲止還挺好。

但是,問題出現在我們想要使用客戶端驗證而無需創建JavaScript客戶端不引人注意的屬性這就是我想實現的。有沒有一種方法可以使用現有的MVC代碼創建不引人注意的客戶端驗證而不使用數據註釋?

E.g.覆蓋現有的ModelMetadataProvider DataAnnotationsModelMetadataProvider並從我自己的幫助器中調用一個新的方法。

實現上述場景的最佳方法是什麼?

+0

我同意@MystereMan。另外,要注意你的問題似乎有點不完整,或者說不完全正確。 MVC已經建立了不顯眼的「客戶端」驗證。我最近做了類似的事情。我創建了一個ModelMetadataProvider和新的html模板,以將不顯眼的數據劃破html屬性到我的HTML中用於「動態」模型,是的,這是正確的動態模型,但我仍然需要編寫自己的JavaScript代碼來處理這些屬性。 – 2012-04-11 22:22:32

+0

在問題結尾處,我陳述「是否有一種方法可以使用現有的MVC代碼創建不引人注意的客戶端驗證,而不使用數據註釋」。也就是說,我可以在沒有數據註釋的情況下實現不顯眼的偏差,也不需要自己編寫javascript代碼。看起來我們都想出了實現一個新的ModelMetadataProvider的相同的解決方案,或者在我的情況下,我從AssociatedMetadataProvider繼承。 這將是很好,如果我們不必複製已經到位的車輪,只是因爲螺栓沒有準確對齊! – 2012-04-13 12:54:51

+0

你不能。這是它的工作方式,不幸的是在你的情況下,工作必須完成。 – 2012-04-13 17:26:31

回答

0

你到底該如何創建「動態MVC3 html」?你的意思是你只是在不使用實際視圖的情況下創建html?由於驗證在模型聯編程序(不在html中)中由服務器端處理,所以動態html沒有什麼區別。客戶端,你只需添加data- *屬性,使其工作。

由於您沒有提供任何關於您的html的上下文,我們不能開始告訴您如何完成您想要的。