2012-08-27 30 views
5

因此,我正在ASP.NET MVC中創建一個註冊頁面,並根據一些條件(取自數據庫)改變列表中的字段。多態MVC視圖

在每次更新數據庫時,什麼會被視爲在視圖中顯示這些字段而無需更改代碼的最佳方法。

我正在考慮的當前系統是使用「名稱,數據類型」創建一個字典,然後只是遍歷列表併爲每個名稱添加一個新的輸入類型(使用數據類型的開關以獲取正確的編輯器)。但它看起來像一個老式的,並沒有充分利用.NET MVC系統的好處(如驗證,默認值,針對特定內容的自定義編輯器)。

有沒有一種方法我可能不知道在.NET中處理這個問題?

+0

最好的方法(從MVC的角度來看)將爲每個場景製作不同的視圖,因爲「視圖不應該包含任何類型的邏輯」。但是,我懷疑這是你尋求的答案的類型,所以我不打算髮布這個答案。你能否提供你想要達到什麼成績的更多細節,爲什麼?這將幫助我們爲您的問題尋找更具體的解決方案(您不會介意應用)。 – Pluc

+0

@Pluc基本上是一個事件註冊系統,每個「客戶」都指定了他們自己的自定義字段,這是最終用戶在允許註冊前必須輸入的。由於我們不控制客戶條目,所以我們很難爲每種情況制定一個視圖:( –

+0

因此,這些字段可以是多種類型和任意數量的? – Pluc

回答

6

我有非常類似的問題。發佈是here

不,ASP.NET MVC中沒有多態視圖。至少我不能讓它工作做大量的實驗,並在Stack Overflow上以不同的方式多次提出這個問題。

在視圖中定義的@model類型將在視圖中定義它的類型,而不是模型的實際類型(如果它是接口或抽象類或基類,而您在子類中傳遞所有美麗裝飾品,這將不起作用,因爲類型是由模型類型定義的)。

對不起,您的問題沒有正面答案。我最終編寫了一堆編輯器模板,這些編輯器模板僅在模型類型中有所不同。巨大的DRY違規,但這是ASP MVC工作的方式,不幸

希望這可以幫助您節省一些時間。

+0

感謝這個答案。我現在可以停止轟炸我的頭來對付ASP.NET MVC的OO缺陷性質。到目前爲止,我所有的實驗都證實了exactl你說什麼:這裏是沒有多態的意見在ASP.NET MVC – Geeb

+0

享受。花費了大量的時間,所以試圖將其中的一部分存儲給其他人 –