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相关推荐

  1. 白话学习MVC(六)模型绑定

    一.什么是模型绑定? 模型绑定存在的意义就是为Action的参数提供值,例如:如下表单中提交了数据,那么Action(即:Index)的参数Id,Name的值就是表单中对应的name属性相同的值,而表 ...

  2. ASP.NET MVC4中@model使用多个类型实例的方法

    有时需要在ASP.NET MVC4的视图的@model中使用多个类型的实例,.NET Framework 4.0版本引入的System.Tuple类可以轻松满足这个需求. 假设Person和Produ ...

  3. ASP.NET MVC4 传递Model到View

    原文发表在:http://www.star110.com/Note/ReadArticle/60641215331146140043.html 开发环境:.NET MVC4 + EF6.0 模型: 1 ...

  4. [转]ASP.NET MVC4中@model使用多个类型实例的方法

    本文转自:http://blog.csdn.net/hulihui/article/details/48199897 有时需要在ASP.NET MVC4的视图的@model中使用多个类型的实例,.NE ...

  5. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(12)-系统日志和异常的处理②...

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(12)-系统日志和异常的处理② 上一讲我们做了日志与异常的结果显示列表,这一节我们讲要把他应用系统中来. ...

  6. ASP.NET MVC以ValueProvider为核心的值提供系统: DictionaryValueProvider

    NameValueCollectionValueProvider采用一个NameValueCollection作为数据源,DictionnaryValueProvider的数据源类型自然就是一个Dic ...

  7. ASP.NET MVC4中调用WEB API的四个方法

    当今的软件开发中,设计软件的服务并将其通过网络对外发布,让各种客户端去使用服务已经是十分普遍的做法.就.NET而言,目前提供了Remoting,WebService和WCF服务,这都能开发出功能十分强 ...

  8. 【翻译转载】【官方教程】Asp.Net MVC4入门指南(2):添加一个控制器

    2. 添加一个控制器 · 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-c ...

  9. Autofac3 在MVC4中的运用原理

    这是一种新的开发模式,注入开发模式,或者叫它IOC模式,说起IOC你可以这样去理解它,它为你的某个实现流出一个注入点,你生产的对象,可以根据你之前的配置进行组合.  IOC全称是Inversion o ...

  10. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(34)-文章发布系统①-简要分析...

    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(34)-文章发布系统①-简要分析 原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入 ...

最新文章

  1. 微博收藏(机器学习代码与工具)(一)
  2. python课程设计编写电子通讯录_用Python实现简单通讯录
  3. 软件工程---08.软件测试
  4. 如何用python32位开发词典软件_Python如何实现字典?
  5. 013年十大急需的热门IT技能
  6. 架构漫谈(三):如何做好架构之识别问题
  7. 微服务架构基本介绍与微服务设计模式
  8. 1.2. MariaDB
  9. SQL Server2005 日期字段与字符串比较的怪异问题
  10. 还在担心漏测吗?快来使用jacoco统计下代码覆盖率
  11. R语言数据挖掘实战系列(2)
  12. ISO/IEC 27000 信息安全管理体系认证培训及所有标准资料
  13. 速存,懒人福音!联想修复工具大全 Lenovo Quick Fix 联想智能解决工具
  14. 【UOS统信】安装谷歌浏览器
  15. 产生随机数(C语言)
  16. HTML中图片文件名字有括号,文件批量顺序重命名去掉括号
  17. WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK
  18. node-java_node-jvm
  19. a链接实现alt提示
  20. Ping IP时出现 request time out怎么解决?

热门文章

  1. 解决办法:ImportError: No module named pycuda.driver
  2. 将RGB转换为JPG格式到内存的代码
  3. 世界杯:为什么进攻大多沿着边路前进?
  4. 生信装虚拟机好还是云服务器,学习小组Day2笔记--潘潘
  5. java 组件更新,java – 我可以批量处理一些Swing组件更新,以便重绘全部一次完成吗?...
  6. 鸿蒙系统是华容网格吗,鸿蒙上手机还在迟疑,国内对手却已悄然来到
  7. 安装程序无法创建新的系统分区也无法定位现有系统分区_不要再给硬盘胡乱分区了,这里有最方便安全的分区方法。...
  8. 单CPU环境中如何实现多进程并行工作?
  9. 一次JDBC与MySQL因“CST”时区协商误解导致时间差了13或14个小时
  10. SQLAlchemy数据库映射和使用