博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC扩展DataAnnotationsModelMetadataProvider给model属性对应的页面元素添加任意属性和值...
阅读量:7042 次
发布时间:2019-06-28

本文共 1702 字,大约阅读时间需要 5 分钟。

比如,有这样一个类:

    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
(this HtmlHelper
html, Expression
> 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)})

 

参考资料:

转载地址:http://dyxal.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
NGUI各个基本组件总结
查看>>
利用Qt插件实现HellowWord
查看>>
音程的分类
查看>>
spring 3.2 自定义参数绑定--日期格式转换器
查看>>
Linux网络客户端命令
查看>>
C++新手随笔(C++中的类型转换函数)
查看>>
Wds 自定义模板部署
查看>>
初探mysql
查看>>
交换机端口的tag与untag
查看>>
查询mysql当前连接数
查看>>
我的家庭私有云计划-2
查看>>
phpExcel常用方法详解【附有php导出excel加超级链接】
查看>>
我的友情链接
查看>>
vi编辑器的简单说明
查看>>
用Java写算法之八:桶排序
查看>>
linux命令:浅谈shell中如何进行算术运算
查看>>
shell总结
查看>>
c++数据类型
查看>>
我的友情链接
查看>>