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", "");
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", "");
datasource.Add("first[0].EmailAddress", "Foo@gmail.com"); datasource.Add("first[1].Name", "Bar");
datasource.Add("first[1].PhoneNo", "");
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>
MVC4 Model ValueProvider的更多相关文章
- MVC4 Model View Controller分离成独立项目
适合人群:了解MVC项目的程序员 开发工具:vs2012 开发语言:C# 小项目或功能比较单一的项目可以直接新建一个MVC基本项目类型即可,但随着需求不断迭代,项目的功能模块越来越多,甚至有些模块可以 ...
- MVC4 Model ControllerDescriptor
1. ControllerDescriptor 的描述 Controller 的Action 方法有以下一些特性: 1.1 ActionNameAttribute特性 他继承自 System.We ...
- 白话学习MVC(六)模型绑定
一.什么是模型绑定? 模型绑定存在的意义就是为Action的参数提供值,例如:如下表单中提交了数据,那么Action(即:Index)的参数Id,Name的值就是表单中对应的name属性相同的值,而表 ...
- Spring Boot笔记一
Spring Boot 入门 Spring Boot 简介 > 简化Spring应用开发的一个框架:> 整个Spring技术栈的一个大整合:> J2EE开发的一站式解决方案: 微服务 ...
- .NET MVC4 数据验证Model(二)
一.概述 MVC分为ViewModel.Control.View,对数据的封装MVC做的很好,确实是不错的WEB框架,针对MVC的ViewModel封装的也是相当的不错,最近做一个MVC的项目,采 ...
- ASP.NET MVC4 传递Model到View
原文发表在:http://www.star110.com/Note/ReadArticle/60641215331146140043.html 开发环境:.NET MVC4 + EF6.0 模型: 1 ...
- EF5&MVC4 学习1、创建新的Contoso University Application,并创建Model Class 生成对应的database
参考:http://www.asp.net/mvc/tutorials/getting-started-with-ef-5-using-mvc-4/creating-an-entity-framewo ...
- MVC4 中的Model显示设置(含显示Shared/DisplayTemplates和编辑Shared/EditorTemplates)
转载于: MVC4 中的Model显示设置(含显示Shared/DisplayTemplates和编辑Shared/EditorTemplates) 虽然 [Display(Name="XX ...
- Artech的MVC4框架学习——第六章Model的验证
第一Model验证旨在为通过Model绑定生成参数进行检验以确保用户输入数据的有效性(p318) 第二Model验证分两种:服务器端(三种解决方案 p256)和客户端(ajax\jQuery) 第三服 ...
随机推荐
- CentOS7.6安装mailx
由于ECS服务器安全问题,发送邮件统一使用SSL模式 安装开始: 第一步:Yum安装mailx:yum install -y mailx 第二步: 创建证书存放目录(如以存在无需创建):mkdir - ...
- 09_java之面向对象概述
01面向对象和面向过程的思想 * A: 面向过程与面向对象都是我们编程中,编写程序的一种思维方式 * a: 面向过程的程序设计方式,是遇到一件事时,思考“我该怎么做”,然后一步步实现的过程. * b: ...
- apt-get使用国内镜像源
apt-get 1.复制原文件备份(万一弄坏源文件可恢复) sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 2.编辑源列表文件 sudo ...
- Oracle11gR2导入导出实战之表空间传输
Oracle11gR2导入导出实战之使用Datapump进行表空间传输 表空间检查 [oracle@localhost database]$ ps -ef|grep smon oracle 8981 ...
- STL源码剖析之组件
本篇文章开始,进行STL源码剖析的一些知识点,后续系列笔记全是参照<STL源码剖析>进行学习记录的 STL在现在的大部分项目中,实用性已经没有Boost库好了,毕竟STL中仅仅提供了一些容 ...
- unit_2_homework
随记2018/4/23 # 找元祖中的元素,移除每个元素的空格,并查找以a或A开头,c结尾的所有元素. # 思路:将i取出来,求得li列表中有多少个元素for i in range(len(li)): ...
- iss 默认上传大小为30 M
在 Windows7(iis7.5).Win2008(iis 7.0)和Win2003(iis 6.0) 中,默认设置是特别严格和安全的,这样可以最大限度地减少因以前太宽松的超时和限制而造成的攻击.指 ...
- VS2015 create a C++ console application based on WinRT
1. Enable /ZW 2. Disable /Gm 3. #using C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcpack ...
- Linux Debian 下LNMP服务器——nginx+mysql+php环境搭建及配置
昨天刚给公司服务器装了LNMP服务器环境,在这里简单记录一下过程备忘. 这里我在安装的时候是用的Dotdeb源,仅供参考. 1.导入Dotdeb源,据说Dotdeb源里的软件版本比较新. 在向源中导入 ...
- validator 参数校验的常用注解
@AssertFalse Boolean,boolean 验证注解的元素值是false @AssertTrue Boolean,boolean 验证注解的元素值是true @NotNull 任意类型 ...