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) 第三服 ...
随机推荐
- 解决windows上安装TortoiseSVN后不能使用命令行问题
一般我们安装TortoiseSVN的时候都是一路next安装好之后就右键开始使用.但是有时候我们需要在windows的命令窗口下执行SVN命令.这时候我们就会发现svn help之后显示没svn这个命 ...
- PHP正则表达式详解
正则表达式定义 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. 列目录时, ...
- C++对象数组初始化
类对象 数组 初始化可以使用构造函数初始化,同时类有不同的构造函数,可以对类对象数组元素使用不同的构造函数;
- GNU/Linux LVM 原理图释
逻辑卷管理器(英语:Logical Volume Manager,缩写为LVM),又译为逻辑卷宗管理器.逻辑扇区管理器.逻辑磁盘管理器,是Linux核心所提供的逻辑卷管理(Logical volume ...
- 获取用户的相关请求信息, 以及包括请求头 request.environ
#在index文件中 1. print(type(request)) #看出所属库 2. from django.core.handlers.wsgi import WSGIRequest #查看WS ...
- flutter container image FittedBox AspectRatio
当container指定了大小时,里面放入图片后,图片是居中自适应的,根据图片的大小,垂直居中或者水平居中.因为Image的默认自适应就是Contain, BoxFit.Contain 如果conta ...
- Git 搭建私有仓库
简介: 如果你不想把自己的代码公开让别人阅读.使用,也不想花钱购买 GitHub 私有仓库,那么你就需要自己动手做一个了. 当然你也可以使用 Coding.net ,上面可以创建免费的私有仓库.( 今 ...
- cdn path b 问题
主节点内存和磁盘最好大点,许多默认东西都放主节点了 mysql 配置文件修改后server-id = 1 1.hive 启动不起来 去配置里关掉 严格的 Hive Metastore 架构验证 hiv ...
- 蓝桥杯练习系统算法训练习题加答案java版本
附上百度文库的链接:http://wenku.baidu.com/view/afb78d36b42acfc789eb172ded630b1c59ee9bf7
- Composer切换到Laravel-China 镜像
全局 composer config -g repo.packagist composer https://packagist.laravel-china.org 该项目 composer confi ...