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) 第三服 ...
随机推荐
- ubuntu 12.04 配置-1
今天对ubuntu 12.04 系统进行了相关的配置,配置的主要内容有: 1)php + mysql + apache2 web开发环境的搭建: 2)vim的简单保存退出指令: 3)文件和文件夹权限的 ...
- C# 接口(Interface)
接口定义了所有类继承接口时应遵循的语法合同.接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做" 部分. 口定义了属性.方法和事件,这些都是接 ...
- 第7章 Ping程序和traceroute程序
Ping程序 ping程序编写的目的是为了测试另外一台主机是否可达.程序发送的是一份ICMP回显请求报文给目的主机,并等待ICMP回显应答. 一般的TCP/IP实现都在内核中直接支持ping服务器—— ...
- ajax 回调函数
回调函数 如果要处理$.ajax()得到的数据,则需要使用回调函数.beforeSend.error.dataFilter.success.complete. beforeSend 在发送请求之前调用 ...
- python 获取当前运行的类名函数名
import inspect def get_current_function_name(): return inspect.stack()[1][3] class MyClass: def func ...
- shell编程——内部变量
常用的内部变量有:echo, eval, exec, export, readonly, read, shift, wait, exit 和 点(.) echo:将变量名指定的变量显示到标准输出 [r ...
- 认识Excel并创建一个excel(网址:http://poi.apache.org/)
需要导入的jar包: package com.huawei.excel; import java.io.FileOutputStream; import org.apache.poi.hssf.use ...
- ubuntu16.04 qt opencv3.4
#------------------------------------------------- # # Project created by QtCreator 2018-12-12T14:53 ...
- c#服务器端控件confirm
1>服务器端控件删除的数据的时候,可以调用js的confirm防止误操作,但是默认的样式实在是让人难以接受,怎么调用自定义的提示框而且同步回发到服务器端, 服务器端的控件的用linkbutton ...
- Openssl s_server命令
一.简介 s_server是openssl提供的一个SSL服务程序.使用此程序前,需要生成各种证书.本命令可以用来测试ssl客户端,比如各种浏览器的https协议支持 二.语法 openssl s_s ...