MVC4 Model ValueProvider
1. NameValueCollectionValueProvider:
ValueProvider 的数据容器一般具有类似字典的结构。NameValueCollection 表示一种 key 和value 均为字符的字典。
方法 GetKeysFromPrefix 以字典的形式返回数据源容器中所有具有指定前缀的key。
两种前缀的形式:
两种前缀形式辅助实现Model绑定数据。
一种是采用"." 一种是采用"[]" 集合的方式:
public ActionResult Index(){ NameValueCollection datasource = new NameValueCollection();datasource.Add("foo.Name", "Foo");datasource.Add("foo.PhoneNo", "123456789");datasource.Add("foo.EmailAddress", "Foo@gmail.com");datasource.Add("foo.Address.Province", "江苏");datasource.Add("foo.Address.City", "苏州");datasource.Add("foo.Address.District", "工业园区");datasource.Add("foo.Address.Street", "星湖街328号");NameValueCollectionValueProvider valueProvider = new NameValueCollectionValueProvider(datasource, CultureInfo.InvariantCulture);return View(valueProvider);}
@model NameValueCollectionValueProvider <html> <head><title>指定前缀的Key</title><link rel="stylesheet" href="~/Style.css" /> </head> <body><table rules="all"><tr><th colspan="2">foo</th></tr>@foreach (var item in Model.GetKeysFromPrefix("foo")){ <tr><td>@item.Key</td><td>@item.Value</td></tr>}<tr><th colspan="2">foo.Address</th></tr>@foreach (var item in Model.GetKeysFromPrefix("foo.Address")){ <tr><td>@item.Key</td><td>@item.Value</td></tr>}</table> </body> </html>
现在来看看数组"[]"形式的代码:
public ActionResult Index(){NameValueCollection datasource = new NameValueCollection();datasource.Add("first[0].Name", "Foo");datasource.Add("first[0].PhoneNo", "123456789");datasource.Add("first[0].EmailAddress", "Foo@gmail.com");datasource.Add("first[1].Name", "Bar");datasource.Add("first[1].PhoneNo", "987654321");datasource.Add("first[1].EmailAddress", "Bar@gmail.com");NameValueCollectionValueProvider valueProvider = new NameValueCollectionValueProvider(datasource, CultureInfo.InvariantCulture);return View(valueProvider);}
@model NameValueCollectionValueProvider <html> <head><title>指定前缀的Key</title><link rel="stylesheet" href="~/Style.css" /> </head> <body><table><tr><th colspan="2">first</th></tr>@foreach (var item in Model.GetKeysFromPrefix("first")){ <tr><td>@item.Key</td><td>@item.Value</td></tr>}<tr><th colspan="2">first[0]</th></tr>@foreach (var item in Model.GetKeysFromPrefix("first[0]")){ <tr><td>@item.Key</td><td>@item.Value</td></tr>}<tr><th colspan="2">first[1]</th></tr>@foreach (var item in Model.GetKeysFromPrefix("first[1]")){ <tr><td>@item.Key</td><td>@item.Value</td></tr>}</table></body> </html>
2. DictionaryValueProvider: 是将数据源存放在真正的字典对象之中。他们之间不同之处在于NameValueCollection 中的元素仅局限于字符串。
public ActionResult DataOfChildActionValueProvider(){ControllerContext.RouteData.Values["Foo"] = "abc";ControllerContext.RouteData.Values["Bar"] = "ijk";ControllerContext.RouteData.Values["Baz"] = "xyz";ChildActionValueProvider valueProvider = new ChildActionValueProvider(ControllerContext);return View(valueProvider);}
@model ChildActionValueProvider <table rules="all"><tr><th>Key</th><th colspan="2">Value</th></tr>@{var dictionary1 = this.Model.GetDataSource(); }@foreach (var item1 in dictionary1){DictionaryValueProvider<object> valueProvider = item1.Value.RawValue as DictionaryValueProvider<object>;if (null == valueProvider){ <tr><td>@item1.Key</td><td colspan="2">@item1.Value.RawValue</td></tr>}else{var dictionary2 = valueProvider.GetDataSource();<tr><td rowspan="@(dictionary2.Count + 1)">@item1.Key</td><th>Key</th><th>Value</th></tr>foreach(var item2 in dictionary2){<tr><td>@item2.Key</td><td>@item2.Value.RawValue</td></tr>} }} </table>
同时在Index 中
<html> <head><title>ChildActionValueProvider的数据结构</title><link rel="stylesheet" href="~/Style.css" /> </head> <body>@Html.Action("DataOfChildActionValueProvider", new { Foo = 123, Bar = 456, Baz = 789 }) </body> </html>
转载于:https://www.cnblogs.com/dragon-L/p/5246912.html
MVC4 Model ValueProvider相关推荐
- 白话学习MVC(六)模型绑定
一.什么是模型绑定? 模型绑定存在的意义就是为Action的参数提供值,例如:如下表单中提交了数据,那么Action(即:Index)的参数Id,Name的值就是表单中对应的name属性相同的值,而表 ...
- ASP.NET MVC4中@model使用多个类型实例的方法
有时需要在ASP.NET MVC4的视图的@model中使用多个类型的实例,.NET Framework 4.0版本引入的System.Tuple类可以轻松满足这个需求. 假设Person和Produ ...
- ASP.NET MVC4 传递Model到View
原文发表在:http://www.star110.com/Note/ReadArticle/60641215331146140043.html 开发环境:.NET MVC4 + EF6.0 模型: 1 ...
- [转]ASP.NET MVC4中@model使用多个类型实例的方法
本文转自:http://blog.csdn.net/hulihui/article/details/48199897 有时需要在ASP.NET MVC4的视图的@model中使用多个类型的实例,.NE ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(12)-系统日志和异常的处理②...
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(12)-系统日志和异常的处理② 上一讲我们做了日志与异常的结果显示列表,这一节我们讲要把他应用系统中来. ...
- ASP.NET MVC以ValueProvider为核心的值提供系统: DictionaryValueProvider
NameValueCollectionValueProvider采用一个NameValueCollection作为数据源,DictionnaryValueProvider的数据源类型自然就是一个Dic ...
- ASP.NET MVC4中调用WEB API的四个方法
当今的软件开发中,设计软件的服务并将其通过网络对外发布,让各种客户端去使用服务已经是十分普遍的做法.就.NET而言,目前提供了Remoting,WebService和WCF服务,这都能开发出功能十分强 ...
- 【翻译转载】【官方教程】Asp.Net MVC4入门指南(2):添加一个控制器
2. 添加一个控制器 · 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-c ...
- Autofac3 在MVC4中的运用原理
这是一种新的开发模式,注入开发模式,或者叫它IOC模式,说起IOC你可以这样去理解它,它为你的某个实现流出一个注入点,你生产的对象,可以根据你之前的配置进行组合. IOC全称是Inversion o ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(34)-文章发布系统①-简要分析...
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(34)-文章发布系统①-简要分析 原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入 ...
最新文章
- 微博收藏(机器学习代码与工具)(一)
- python课程设计编写电子通讯录_用Python实现简单通讯录
- 软件工程---08.软件测试
- 如何用python32位开发词典软件_Python如何实现字典?
- 013年十大急需的热门IT技能
- 架构漫谈(三):如何做好架构之识别问题
- 微服务架构基本介绍与微服务设计模式
- 1.2. MariaDB
- SQL Server2005 日期字段与字符串比较的怪异问题
- 还在担心漏测吗?快来使用jacoco统计下代码覆盖率
- R语言数据挖掘实战系列(2)
- ISO/IEC 27000 信息安全管理体系认证培训及所有标准资料
- 速存,懒人福音!联想修复工具大全 Lenovo Quick Fix 联想智能解决工具
- 【UOS统信】安装谷歌浏览器
- 产生随机数(C语言)
- HTML中图片文件名字有括号,文件批量顺序重命名去掉括号
- WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK
- node-java_node-jvm
- a链接实现alt提示
- Ping IP时出现 request time out怎么解决?
热门文章
- 解决办法:ImportError: No module named pycuda.driver
- 将RGB转换为JPG格式到内存的代码
- 世界杯:为什么进攻大多沿着边路前进?
- 生信装虚拟机好还是云服务器,学习小组Day2笔记--潘潘
- java 组件更新,java – 我可以批量处理一些Swing组件更新,以便重绘全部一次完成吗?...
- 鸿蒙系统是华容网格吗,鸿蒙上手机还在迟疑,国内对手却已悄然来到
- 安装程序无法创建新的系统分区也无法定位现有系统分区_不要再给硬盘胡乱分区了,这里有最方便安全的分区方法。...
- 单CPU环境中如何实现多进程并行工作?
- 一次JDBC与MySQL因“CST”时区协商误解导致时间差了13或14个小时
- SQLAlchemy数据库映射和使用