asp.net-mvc – 用于创建具有模型和ViewData项目的ViewDataDictionary的简要说明?
|
有没有办法创建具有模型的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 MVC 3:单元测试控制器动作
- ASP.NET会话超时测试
- ASP.NET MVC.检查用户是否已获得JavaScript授权
- asp.net-mvc – 如何在不依赖NHibernate的情况下为每个请求
- asp.net-mvc – 嵌套对象的远程ViewModel验证无效
- asp.net-mvc – 在ASP.NET MVC应用程序中更改日期格式
- asp.net-mvc – 在“剃刀”视图中默认一个部分
- asp.net-mvc-4 – ASP.NET MVC 4应用程序捆绑和分类,为什么
- asp.net – 菜单控件生成的js导致Web窗体中的Sys未定义的异
- ASP.NET Web.config转换将无法在安装程序中使用
- asp.net – .NET VirtualPathProviders和预编译
- 如何为Asp.Net中的所有子文件夹注册HttpHandler?
- asp.net – WCF与WebAPI和本机移动设备
- asp.net-mvc – 如何组合两个dataTextFields的Se
- asp.net-mvc – 服务层验证
- asp.net-mvc – ASP.NET MVC – AntiForgeryToke
- asp.net-web-api – 认证/授权MVC 5和Web API –
- asp.net-mvc – 添加ELMAH并更改elmah.mvc.route
- asp.net – ConfigurationManager.AppSettings缓
- asp.net webservice处理gzip压缩请求
