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) 第三服 ...
随机推荐
- 说说JDK中的List-ArrayList、Vector、LinkedList
为方便开发人员,JDK提供了一套主要数据结构的实现,比如List.Map等.今儿说说List接口. List接口的一些列实现中,最常用最重要的就是这三个:ArrayList.Vector.Linked ...
- 爬虫的三种解析方式(正则解析, xpath解析, bs4解析)
一 : 正则解析 : 常用正则回顾: 单字符: . : 除换行符以外的所有字符 [] : [aoe] [a-w] 匹配集合中任意一个字符 \d : 数字 [0-9] \D : 非数字 \w : 非数字 ...
- 系统键盘按钮keyCode大全
字母和数字键的键码值(keyCode) 按键 键码 按键 键码 按键 键码 按键 键码 A 65 J 74 S 83 1 49 B 66 K 75 T 84 2 50 C 67 L 76 U 85 3 ...
- MFC单文档分割区(CSplitterWnd)
用VS08程序向导,单文档程序,默认设置生成的.工程名为3view; 其中默认生成的视图类CMy3viewView,对应3viewView.h,3viewView.cpp; 在Resourse Vie ...
- python:ord()和chr()——字符串和ASCll编码转换
ord()函数:字符串——>ascll编码 chr()函数:ascll编码——>字符串 #函数 for i in range(ord('d'),ord('f')+1):#拿到d和f对应的a ...
- PHP - 脚本退出(包括异常退出),执行指定代码
之前做聊天室的时候有那么个需求就是当用户异常断线的时候就应该清除她的在线状态.因为当时对于flush不够了解,尝试了各种办法,好像都没办法在我们开发机上面执行相应的代码.后来知道是flush的原因.我 ...
- 不同应用场景的10个Linux面试问题与解答
本文由 极客范 - 小道空空 翻译自 Avishek Kumar.欢迎加入极客翻译小组,同我们一道翻译与分享.转载请参见文章末尾处的要求. 这一次我们不再介绍某个特定主题的Linux面试问题,而是随机 ...
- 从零玩转JavaWeb系列7web服务器-----表单的提交
在企业开放中如何提交一张表单? 例如:用户注册表 <!--表单内容--> <form action="/28-mystore/regist" id="R ...
- Linux常用命令----基本文件系统常用命令
1.查看当前工作目录---pwd sunny@sunny-ThinkPad-T450:~$ pwd /home/sunny sunny@sunny-ThinkPad-T450:~$ cd Worksp ...
- Oracle 下基于 DBMS_RESOURCE_MANAGER 包估算数据库存储 IO 性能
:first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { border: 0; m ...