『飞秋』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/
總結
以上是生活随笔為你收集整理的『飞秋』Html.Label的缺陷及补救办法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于开发框架的搭建
- 下一篇: 应用程序通用开发框架