.NET MVC4 实训记录之六(利用ModelMetadata实现资源的自主访问)
2014-08-30 15:01
127 查看
上一篇我们已经实现自定义资源文件的访问,该篇我们使用它配合ModelMetadata实现资源文件的自主访问。这样做是为了我们能更简单的用MVC原生的方式使用资源文件。由于我的文章旨在记录MVC项目的实现,因此不做框架底层实现方面的讲解(其实考虑到自己的能力,也不能为大家讲解的多么深入。如需要更深入的了解MVC底层实现,请自行搜索。在这里我推荐蒋金楠(Artech)老师的相关博文)。
对于使用EF,我们不得不知道System.ComponentModel.DataAnnotations。DataAnnotations下定义了一系列的Attribute,用于我们的属性字段注解方案。例如DisplayAttribue,用于定义属性所显示的名称的文本信息。RequiredAttribute用于定义属性是否必填,以及必填校验失败后的提示信息。它们是我们最常用的注解属性中的两个,我们一般都使用它们来描述我们的字段在用户界面的显示效果。例如我们在UserProfile定义的UserName属性上引入如下Attribute:
View Code
在资源文件中添加
那么运行项目打开页面后,可以看到如下效果:
导航属性的自定义资源信息也会被显示。这里就可以看出p => p.Address.City时,Provider中的ContainerType则为Address的实际类型,ModelMetadata中的Model则为实际上要显示的子类型的属性。
问题:
我们通过对ModelMetadata内部的属性进行修改,从而实现自定义资源的使用。这种方式属于高阶应用,有必要深入了解MVC的模型绑定相关的知识。本人在完成这篇文章的时候,耗费了相当长的时间(粗略统计大概有3天时间)。主要是想解决多个同类型属性该如何显示不同的自定义资源。例如在UserProfile类型中定义两个同为Address类型的属性,分别为UserAddress、和CompanyAddress。若同时在页面显示这两个属性的City名称,则显示的内容是相同的,都指向同一个资源:
<resource key="Address.City" value="City"/>。但始终未能在第二种方案下找到适合的解决办法。希望有达人能为在下解惑,不胜感激!!!
下期预告:第三中方案解决同类型导航属性显示不同的自定义资源。
对于使用EF,我们不得不知道System.ComponentModel.DataAnnotations。DataAnnotations下定义了一系列的Attribute,用于我们的属性字段注解方案。例如DisplayAttribue,用于定义属性所显示的名称的文本信息。RequiredAttribute用于定义属性是否必填,以及必填校验失败后的提示信息。它们是我们最常用的注解属性中的两个,我们一般都使用它们来描述我们的字段在用户界面的显示效果。例如我们在UserProfile定义的UserName属性上引入如下Attribute:
@using (Html.BeginForm("EditUser", "Account", FormMethod.Post)) { @Html.ValidationSummary() <div> @Html.LabelFor(p => p.UserName) @Html.TextBoxFor(p => p.UserName) @Html.LabelFor(p => p.Address.City) @Html.TextBoxFor(p => p.Address.City) </div> <input type="submit" value="提交" /> }
View Code
在资源文件中添加
<resource key="Address.City" value="City"/>
那么运行项目打开页面后,可以看到如下效果:
导航属性的自定义资源信息也会被显示。这里就可以看出p => p.Address.City时,Provider中的ContainerType则为Address的实际类型,ModelMetadata中的Model则为实际上要显示的子类型的属性。
问题:
我们通过对ModelMetadata内部的属性进行修改,从而实现自定义资源的使用。这种方式属于高阶应用,有必要深入了解MVC的模型绑定相关的知识。本人在完成这篇文章的时候,耗费了相当长的时间(粗略统计大概有3天时间)。主要是想解决多个同类型属性该如何显示不同的自定义资源。例如在UserProfile类型中定义两个同为Address类型的属性,分别为UserAddress、和CompanyAddress。若同时在页面显示这两个属性的City名称,则显示的内容是相同的,都指向同一个资源:
<resource key="Address.City" value="City"/>。但始终未能在第二种方案下找到适合的解决办法。希望有达人能为在下解惑,不胜感激!!!
下期预告:第三中方案解决同类型导航属性显示不同的自定义资源。
相关文章推荐
- 线程之间利用信号量协调对共享资源访问的c++代码实现
- Java 利用监听器来实现记录用户访问网站次数
- 利用6to4隧道穿越ipv4,实现对ipv6资源的访问
- 怎样利用好单片机上的存储器资源来实现OD的存储与访问
- 利用cors,实现js跨域访问Tomcat下资源
- 旧文备份:怎样利用好单片机上的存储器资源来实现OD的存储与访问
- 利用cors,实现js跨域访问Tomcat下资源
- java Web项目中,利用其过滤功能,实现访问者每次访问服务器时,记录访问者的IP,访问时间,Url等信息,并保存到文件的操作
- Subversion之路----利用 svnserve.exe 实现精细的目录访问控制(v1.0)
- 利用sql2005的新特性实现根据子表条件得到的主表键且按其排序取出对应主表记录的方法
- 利用timestamp实现数据库处理同一记录的时间差异问题
- 利用WebResource.axd通过一个URL来访问装配件的内置资源
- 利用ASP实现Oracle数据记录的分页显示
- 利用 AOP 实现 .NET 上完整的基于角色的访问控制(RBAC)模型
- ASP.NET实现记录历史访问人数和当前在线人数
- 利用.net2.0的资源文件实现多语言开发!
- 一步一步实现企业网络架构之九:利用Win2003 NAT功能配置Internet访问
- 利用Putty通过ssh端口转发实现FireFox和MSN加密代理访问
- 利用 AOP 实现 .NET 上完整的基于角色的访问控制(RBAC)模型