有沒有什麼辦法用一行代碼創建帶有模型和附加屬性的ViewDataDictionary
。我試圖在調用強類型視圖時調用RenderPartial
,同時組裝模型和一些額外的顯示配置屬性,而不用在多行中顯式組裝ViewDataDictionary。看來如果RenderPartial
過載同時出現在模型object
和ViewDataDictionary
上,但它看起來好像只是在它們都被填充時忽略了ViewDataDictionary
。用模型和ViewData項創建ViewDataDictionary的速記?
// FAIL: This will result in ViewData being a ViewDataDictionary
// where Model = MyModelObject and there are no other parameters available.
this.Html.RenderPartial("SomePartialView", MyModelObject, new ViewDataDictionary(new { SomeDisplayParameter = true }));
我發現別人用same problem,但他們的解決方案是相同的多線的概念,我發現:創建離散ViewDataDictionary
與模型,添加新的參數(S),並在RenderPartial
呼叫時使用。
var SomeViewData = new ViewDataDictionary(MyModelObject);
SomeViewData.Add("SomeDisplayParameter", true);
this.Html.RenderPartial("SomePartialView", SomeViewData);
我可以隨時換行邏輯爲ChainedAdd
方法返回添加了新元素的重複解釋,但它只是看起來像我缺少創建ViewDataDictionary
的某種方式,會爲我做到這一點(和比我希望的要多一點)。
this.Html.RenderPartial("SomePartialView", new ViewDataDictionary(MyModelObject).ChainedAdd("SomeDisplayParameter", true));
public static ViewDataDictionaryExtensions {
public static ViewDataDictionary ChainedAdd(this ViewDataDictionary source, string key, object value) {
return source.ChainedAdd(new KeyValuePair<string,object>(key, value));
}
public static ViewDataDictionary ChainedAdd(this ViewDataDictionary source, KeyValuePair<string, object> keyAndValue) {
ViewDataDictionary NewDictionary = new ViewDataDictionary(source);
NewDictionary.Add(keyAndValue);
return NewDictionary;
}
}
同時,試圖組裝一個ViewDataDictionary
有一個明確的Model
和ModelState
只是導致編譯錯誤,因爲ModelState中是隻讀的。
// FAIL: Compilation error
this.Html.RenderPartial("SomePartialView", new ViewDataDictionary { Model = MyModelObject, ModelState = new ViewDataDictionary(new { SomeDisplayParameter = true }});
ANSWER(S):它看起來像克雷格和我最終找到兩個單獨的語法,將完成這項工作。在這種情況下,我肯定有偏見,但我喜歡先設置模型並在之後「裝飾」模型。
new ViewDataDictionary(MyModelObject) { { "SomeDisplayParameter", true }, { "SomeOtherParameter", 3 }, { "SomeThirdParameter", "red" } };
new ViewDataDictionary(new ViewDataDictionary() { {"SomeDisplayParameter", true }})
{ Model = MyModelObject };
當然,我仍然在旋轉我的車輪,而沒有[最終點亮]的答案,所以,圓形會得到廣場。
看起來這會創建一個ViewDataDictionary,其Model等於匿名對象,然後用MyModelObject替換Model屬性,而不留下任何附加屬性。它的確教會了我可以將構造函數與其他初始化方法結合起來;我不知道的 - 謝謝。 – patridge 2009-03-03 20:49:12
我剛剛檢查了源代碼。設置模型不會清除字典。 – 2009-03-03 21:03:57