有没有办法ViewDataDictionary
用一行代码创建一个模型和附加属性。我试图RenderPartial
在组装模型和一些额外的显示配置属性时调用强类型视图,而无需跨多行显式组装 ViewDataDictionary。RenderPartial
考虑到同时采用模型object
和 a的重载似乎是可能的,ViewDataDictionary
但看起来它只是忽略了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 }));
我发现其他人有同样的问题,但他们的解决方案与我发现的多线概念相同:ViewDataDictionary
使用模型创建一个离散,添加新参数并在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
使用显式组装 aModel
并ModelState
简单地导致编译错误,因为 ModelState 是只读的。
// FAIL: Compilation error
this.Html.RenderPartial("SomePartialView", new ViewDataDictionary { Model = MyModelObject, ModelState = new ViewDataDictionary( new { SomeDisplayParameter = true }});
回答(S):看起来克雷格和我最终找到了两种不同的语法来完成工作。在这种情况下,我肯定是有偏见的,但我喜欢先设置模型然后“装饰”它的想法。
new ViewDataDictionary(MyModelObject) { { "SomeDisplayParameter", true }, { "SomeOtherParameter", 3 }, { "SomeThirdParameter", "red" } };
new ViewDataDictionary(new ViewDataDictionary() { {"SomeDisplayParameter", true }})
{ Model = MyModelObject };
当然,如果没有他[最终准确]的回答,我仍然会旋转我的轮子,所以,圆圈得到了正方形。