有時,創建新模型類型的開銷很麻煩。在這種情況下,我想設置的ViewData,並且選項似乎是:強類型的ASP.NET MVC ViewData擴展 - 在哪裏放置標識符?
與字符串鍵簡單地設置可視數據,丟了出來。這有明顯的問題。
將標識符(字符串鍵)存儲在某處(控制器上的?),並將其轉出到查看頁面上。在解決其中一個問題的同時,我仍在進行投射,這是有問題的,並且會導致類型推斷。
使用MVCContrib強類型設置/獲取函數。這些很好,但如果類型不是很具描述性,比如說一個布爾型的「IsNew」,那麼它們工作得並不好。它也殺死了類型推斷,並且它幾乎只是在進行強制類型轉換,所以我必須手動同步視圖和控制器。
所以,相反,我正在考慮使用幻像類型來結合類型和密鑰標識符。它會相當於這個僞C#:
class ViewDataKey<T> = string
這將讓我在控制器這樣創建的標識符:
public static readonly ViewDataKey<bool> IsNew = "IsNew";
通過一些簡單的擴展方法,設置數據將是:
ViewData.Set(IsNew, true);
得到它也很容易:
var isNew = ViewData.Get(FrobNozzleController.IsNew);
注意我們不需要指定isNew的類型,它是安全的推斷。密鑰和類型定義存儲在一個位置。
問題:
應該在哪裏密鑰存儲?對於「global-ish」ViewData,一些普通的類可以正常工作。但對於視圖/控制器的具體數據?把它放在控制器上有什麼缺點嗎? (除了控制器的長名稱?)
有沒有更簡單的方法或已經內置的東西?
你是對的,當然。只是有時候,在這裏和那裏添加簡單的標誌似乎是額外的工作。也許他們甚至是可選的(ViewDataKey可以很容易地存儲默認值)。只是爲每個視圖創建一個新的模型似乎是一個很大的開銷。 – MichaelGG 2009-01-23 19:31:57