Asp.net mvc 3 如何向MVC3的模型中添加TipAttribute
我想创建一个新的属性TipAttribute,用于向用户显示有用的提示Asp.net mvc 3 如何向MVC3的模型中添加TipAttribute,asp.net-mvc-3,Asp.net Mvc 3,我想创建一个新的属性TipAttribute,用于向用户显示有用的提示 公共类EditPersonModel{ [显示(Name=“全名”)] [提示(Message=“输入此人的全名”。)] 公共字符串名称{get;set;} } 所以在我看来我会这样做 @InputFor(m=>m.Name) @Html.TipFor(m=>m.Name) 而且它会 输入此人的全名。 我知道我需要为HtmlHelper编写一个扩展方法,但我不知道里面应该写什么 public static MvcH
公共类EditPersonModel{
[显示(Name=“全名”)]
[提示(Message=“输入此人的全名”。)]
公共字符串名称{get;set;}
}
所以在我看来我会这样做
@InputFor(m=>m.Name)
@Html.TipFor(m=>m.Name)
而且它会
输入此人的全名。
我知道我需要为HtmlHelper编写一个扩展方法,但我不知道里面应该写什么
public static MvcHtmlString TipFor(此HtmlHelper HtmlHelper,表达式){
???
}
我已经开始研究Mvc3源代码中DisplayAttribute的实现,但它非常复杂,而且提供我自己的自定义属性看起来并不容易/可插入。有没有标准的MVC3方法可以做到这一点
谢谢大家! 假设您的提示属性具有元数据意识:
public class TipAttribute: Attribute, IMetadataAware
{
public string Message { get; set; }
public void OnMetadataCreated(ModelMetadata metadata)
{
metadata.AdditionalValues["tip"] = Message;
}
}
你可以:
public static class HtmlExtensions
{
public static IHtmlString TipFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression
)
{
var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
var tip = metaData.AdditionalValues["tip"] as string;
var div = new TagBuilder("div");
div.AddCssClass("tip");
div.SetInnerText(tip ?? string.Empty);
return new HtmlString(div.ToString());
}
}
public静态类
{
公共静态IHtmlString TipFor(
这个HtmlHelper HtmlHelper,
表情
)
{
var metaData=modelmetada.FromLambdaExpression(表达式,htmlHelper.ViewData);
var tip=metaData.AdditionalValues[“tip”]作为字符串;
var div=新标记生成器(“div”);
分区AddCssClass(“tip”);
div.SetInnerText(提示??string.Empty);
返回新的HtmlString(div.ToString());
}
}
假设您的提示属性具有元数据意识:
public class TipAttribute: Attribute, IMetadataAware
{
public string Message { get; set; }
public void OnMetadataCreated(ModelMetadata metadata)
{
metadata.AdditionalValues["tip"] = Message;
}
}
你可以:
public static class HtmlExtensions
{
public static IHtmlString TipFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression
)
{
var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
var tip = metaData.AdditionalValues["tip"] as string;
var div = new TagBuilder("div");
div.AddCssClass("tip");
div.SetInnerText(tip ?? string.Empty);
return new HtmlString(div.ToString());
}
}
public静态类
{
公共静态IHtmlString TipFor(
这个HtmlHelper HtmlHelper,
表情
)
{
var metaData=modelmetada.FromLambdaExpression(表达式,htmlHelper.ViewData);
var tip=metaData.AdditionalValues[“tip”]作为字符串;
var div=新标记生成器(“div”);
分区AddCssClass(“tip”);
div.SetInnerText(提示??string.Empty);
返回新的HtmlString(div.ToString());
}
}
太棒了!我还没有测试,但这很有道理,这就是我所希望的。。。像IMetadataAware这样的系统让我可以扩展内置的Lambda解析器。太棒了!我还没有测试,但这很有道理,这就是我所希望的。。。像IMetadataAware这样的系统可以让我扩展内置的Lambda解析器。