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) 第三服 ...
随机推荐
- Tkinter Listbox(列表框)
Python - Tkinter Listbox(列表框): 列表框部件用于显示一个项目列表,用户可以选择的项目数 列表框部件用于显示一个项目列表,用户可以选择的项目数. 语法: 这里是一个简单的 ...
- 读<分布式一致性原理>初识zookeeper
zookeeper是什么 zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如:数据发布/订阅,负载均衡,命名服务,分布式协调/通知 ,集群管理,Master选举 ...
- 部署ASP.net MVC程序到IIS
转:http://www.cnblogs.com/piyeyong/archive/2012/08/15/2640004.html 在网上找到一个table,列举了不同的操作系统对应的IIS版本以及配 ...
- GNU/Linux LVM 原理图释
逻辑卷管理器(英语:Logical Volume Manager,缩写为LVM),又译为逻辑卷宗管理器.逻辑扇区管理器.逻辑磁盘管理器,是Linux核心所提供的逻辑卷管理(Logical volume ...
- 跟我学算法-Logistic回归
虽然Logistic回归叫回归,但是其实它是一个二分类或者多分类问题 这里的话我们使用信用诈骗的数据进行分析 第一步:导入数据,Amount的数值较大,后续将进行(-1,1)的归一化 data = p ...
- 封装baseControl
package com.huawei.base; import java.io.IOException;import java.io.OutputStream;import java.io.Print ...
- java 内存溢出
不健壮代码的特征及解决办法 1.尽早释放无用对象的引用.好的办法是使用临时变量的时候,让引用变量在退出活动域后,自动设置为null,暗示垃圾收集器来收集该对象,防止发生内存泄露. 对于仍然有指针指向的 ...
- Scala基础:模式匹配和样例类
模式匹配 package com.zy.scala import scala.util.Random /** * 模式匹配 */ object CaseDemo { def main(args: Ar ...
- 99. Recover Binary Search Tree (Tree; DFS)
Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...
- StringUtils详解
public static void StringUtil(){ //null 和 ""操作~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //判断是否 ...