『飞秋』Html.Label的缺陷及补救办法

在最近开发的项目中,应用了Html.LabelFor(TModel)来生成<lable/>标签,同时配合Html.TextBoxFor(TModel)来生成<Input/>标签,效果不错,Html.Label的缺陷及补救办法,生成的飞秋Html标签效果如下:
<label for="UserName">标签内容</label>
<input id="UserName" name="UserName" type="text" value="" />问题产生了:<Lable>标签内容</Lable>准备实现多国语言版本,使用的是Resources文件。但是,Html.LabelFor()方法只支持Model的DisplayName属性:public class User
{
    [DisplayName="标签内容"]
    public string DisplayName { get; set; }
    public string SortName { get; set; }
}问题是DisplayName属性不支持国际化,无法调用Resource中的资源字符串!(此处省略n万字,尝试各种解决方法,就不在此描述了,总之是不成功) 那就换个解决方案吧: <%:Html.Label(Resources.User.Info_State_Header) %> 国际化的问题解决了,但是那个优雅的<label for=”UserName”>属性无法实现了!难道鱼与熊掌不能兼得吗?郁闷啊!强大的Asp.net Mvc 框架不是吹牛皮吹出来的,上飞秋家伙自定义HtmlHelper方法,直接上代码,大家都是高手,我就不解释了: view sourceprint?01 namespace System.Web.Mvc 

02 { 

03     public static class myHtmlHelper 

04     { 

05  /// <summary> 

06  /// 自定义HtmlHelper Label方法,解决for属性和国际化字符串不能同时解决的问题 

07   /// </summary> 

08  /// <typeparam name="TModel"></typeparam> 

09  /// <typeparam name="TValue"></typeparam> 

10  /// <param name="?"></param> 

11  /// <param name="expression"></param> 

12  /// <param name="DisplayName">要在Label标签中显示的本地化字符串</param> 

13  /// <returns></returns> 

14  public static MvcHtmlString Label<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression, string DisplayName) 

15  { 

16      string modelName = ExpressionHelper.GetExpressionText(expression); 

17      TagBuilder tagBuilder = new TagBuilder("label"); 

18      tagBuilder.Attributes.Add("for",modelName); 

19      tagBuilder.InnerHtml = DisplayName;  //飞秋

20      return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.Normal)); 

21  } 

22     } 

23 }
啊,问题消失了,继续干活吧,前面的道路还很长呢。飞秋:http://www.freeeim.com/feiq/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值