asp.net-mvc – 用于创建具有模型和ViewData项目的ViewDataDicti
有没有办法创建具有模型的ViewDataDictionary和具有单行代码的其他属性。我正在组装模型和一些额外的显示配置属性,而不是在多行之间明确地组合ViewDataDictionary,来对强类型视图进行RenderPartial调用。似乎可能会给出RenderPartial重载同时使用一个模型对象和一个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 })); 我发现有一个same problem的人,但他们的解决方案是我发现的同样的多行概念:使用模型创建一个离散的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; } } 同样,试图使用一个显式的Model和ModelState组合一个ViewDataDictionary,只会导致一个编译错误,因为ModelState是只读的。 // FAIL: Compilation error this.Html.RenderPartial("SomePartialView",new ViewDataDictionary { Model = MyModelObject,ModelState = new ViewDataDictionary( new { SomeDisplayParameter = true }}); 解答:看起来像Craig和我最终找到两个单独的语法,将完成这项工作。在这种情况下,我绝对有偏见,但我喜欢先设置模型,然后再“装饰”的想法。 new ViewDataDictionary(MyModelObject) { { "SomeDisplayParameter",true },{ "SomeOtherParameter",3 },{ "SomeThirdParameter","red" } }; new ViewDataDictionary(new ViewDataDictionary() { {"SomeDisplayParameter",true }}) { Model = MyModelObject }; 当然,我仍然会旋转我的车轮,没有他的[最终现身]的答案,所以,圆圈得到广场。 解决方法
使用
object initializer和收集初始化器:
new ViewDataDictionary(new ViewDataDictionary() { {"SomeDisplayParameter",true }}) { Model = MyModelObject } 内部ViewDataDictionary获取其集合初始化,然后使用构造函数重载填充“真实”ViewDataDictionary,该重构使用ViewDataDictionary而不是对象。最后,对象初始化器设置模型。 然后只需传递整个事物,而不要单独设置MyModelObject: this.Html.RenderPartial("SomePartialView",null,new ViewDataDictionary(new ViewDataDictionary() { {"SomeDisplayParameter",true }}) { Model = MyModelObject }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 在我养成一个坏习惯之前需要建议
- asp.net – VS.NET 2015项目不会构建
- asp.net – 使用web.config进行密码保护的文件夹
- asp.net-mvc – ASP.NET身份登录
- asp.net-mvc-2 – 使用视图将MVC 2升级到MVC 3问题
- asp.net-mvc – 使用作为集合的模型进行Visual Studio Razo
- 如何在ASP.NET中设置表单提交的目标框架?
- asp.net-mvc – Web API,OData,$inlinecount和测试
- asp.net-mvc-2 – MVC2 – > MVC3升级
- asp.net-mvc – 使用ASP.NET MVC导出数据到Excel文件4 C#正