MVC扩展DataAnnotationsModelMetadataProvider给model属性对应的页面元素添加任意属性和值
2014-05-27 19:01
531 查看
比如,有这样一个类:
public class User
{
public string Name { get; set; }
}
当在强类型视图页,显示属性Name对应的input元素,并想添加一个title属性和对应的值,如图:
□ 思路
→自定义TooltipAttribute,可以打到Name属性上。
→自定义DataAnnotationsModelMetadataProvider,把TooltipAttribute的Tooltip属性值放到放到ModelMetadata中,类型为key/value键值对的AdditionalValues属性中。
→写一个HtmlHelper<TModel>的扩展方法,把ModelMetadata的AdditionalValues属性值取出来。
把自定义特性TooltipAttribute打到属性上。
using MvcApplication1.Extension;
namespace MvcApplication1.Models
{
public class User
{
[Tooltip("请输入用户名")]
public string Name { get; set; }
}
}
自定义DataAnnotationsModelMetadataProvider,把自定义特性TooltipAttribute的Tooltip属性值放到ModelMetadata的AdditionalValues中。
扩展HtmlHelper<TModel>,先获取model相关的ModelMetadata,从ModelMetadata.AdditionalValues中键为Tooltip的值,即打在User的Name属性上[Tooltip("请输入用户名")]对应的input中title="请输入用户名"。
全局注册自定义DataAnnotationsModelMetadataProvider。
protected void Application_Start()
{
......
ModelMetadataProviders.Current = new CustomModelMetadataProvider();
}
视图中:
@model MvcApplication1.Models.User
@Html.TextBoxFor(model => model.Name, new {title = @Html.TooltipFor(model => model.Name)})
参考资料:
Creating your own modelmetadataprovider to handle custom attributes
public class User
{
public string Name { get; set; }
}
当在强类型视图页,显示属性Name对应的input元素,并想添加一个title属性和对应的值,如图:
□ 思路
→自定义TooltipAttribute,可以打到Name属性上。
→自定义DataAnnotationsModelMetadataProvider,把TooltipAttribute的Tooltip属性值放到放到ModelMetadata中,类型为key/value键值对的AdditionalValues属性中。
→写一个HtmlHelper<TModel>的扩展方法,把ModelMetadata的AdditionalValues属性值取出来。
把自定义特性TooltipAttribute打到属性上。
using MvcApplication1.Extension;
namespace MvcApplication1.Models
{
public class User
{
[Tooltip("请输入用户名")]
public string Name { get; set; }
}
}
自定义DataAnnotationsModelMetadataProvider,把自定义特性TooltipAttribute的Tooltip属性值放到ModelMetadata的AdditionalValues中。
扩展HtmlHelper<TModel>,先获取model相关的ModelMetadata,从ModelMetadata.AdditionalValues中键为Tooltip的值,即打在User的Name属性上[Tooltip("请输入用户名")]对应的input中title="请输入用户名"。
using System.Linq.Expressions; namespace System.Web.Mvc { public static class TooltipExtension { public static MvcHtmlString TooltipFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel,TValue>> expression) { var modelMetadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData); if (modelMetadata.AdditionalValues.ContainsKey("Tooltip")) { return new MvcHtmlString((string)modelMetadata.AdditionalValues["Tooltip"]); } return new MvcHtmlString(""); } } }
全局注册自定义DataAnnotationsModelMetadataProvider。
protected void Application_Start()
{
......
ModelMetadataProviders.Current = new CustomModelMetadataProvider();
}
视图中:
@model MvcApplication1.Models.User
@Html.TextBoxFor(model => model.Name, new {title = @Html.TooltipFor(model => model.Name)})
参考资料:
Creating your own modelmetadataprovider to handle custom attributes
相关文章推荐
- ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidatorProvider
- ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidatorProvider
- ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidator
- Js:getAttribute 取html中某个元素属性的值 或者设置添加属性和值
- 在C# ASP.NET中,要添加属性到控件中 在HTML页面获取控件中自己定义属性和值
- ASP.NET MVC 学习7、为Model Class的字段添加验证属性(validation attribuate)
- 用页面脚本扩展mvc自动添加的验证
- Smack Message属性扩展---添加自定义元素(标签)
- MVC使用AdditionalMetadata为Model属性添加额外信息
- MVC: Data Annotations for Model Validation
- 【C#】使用IExtenderProvider为控件添加扩展属性,像ToolTip那样
- ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidator
- Smack Message属性扩展---添加自定义元素(标签)
- 改变Web页面上元素外观的最快捷的方法是添加style属性
- ASP.NET MVC: 用db4o来做TempDataProvider(另附一个泛型的RedirectToAction方法)
- 扩展GridView实现多选(全选)、点击行任意位置选择行、选中变色、添加双击事件等
- 巧用Deklarit中DataProvider的Order属性进行动态排序
- WSS 扩展文件夹的属性--如何给文件夹添加扩展字段
- asp.net(c#)页面加载时添加控件的属性和回车问题
- asp.net动态添加页面元素