[转]自定义ASP.NET MVC Html辅助方法
本文轉自:http://www.cnblogs.com/myshell/archive/2010/05/09/1731269.html
在ASP.NET MVC中,Html輔助方法給我們程序員帶來很多方便,其重要性也就不言自明。有時候,我們不想重復地寫一些HTML代碼,或者MS沒有提供我們想要的那個HTML標簽的Html輔助方法,那么,我們就可以通過自己定義一個Html擴展方法來達到這個目的。
比如,到目前為止,Html擴展方法中沒有關于<input type="file" />這類標簽的輔助方法,那么我們就可以自已實現一個。本文以實現<input type="file" />標簽為例,演示如何實現自定義Html擴展方法。
一、實現自定義弱類型Html擴展方法
其實實現自定義Html擴展方法并不難,有興趣的同學可以去看下MVC源代碼,關于Html擴展方法部分。要用到System.Web.Mvc命名空間下的TagBuilder類,MvcHtmlString類。TagBuilder類為Html輔助方法生成HTML標簽,MvcHtmlString代表HTML編碼的字符串。擴展方法代碼如下所示:
代碼 publicstaticclass MyInputExtensions { publicstatic MvcHtmlString Input(this HtmlHelper htmlHelper, string name) { TagBuilder tagBuilder =new TagBuilder("input");//設置標簽類型為input tagBuilder.Attributes.Add("type", "file");//為標簽添加type屬性及值 tagBuilder.Attributes.Add("name", name);//為標簽添加name屬性及值 tagBuilder.GenerateId(name);//為標簽生成Id,name參數代碼Id的值 //創建經過HTML加密的字符串 //TagRenderMode.SelfClosing枚舉值代表當前標簽是自動關閉的return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.SelfClosing)); } }需要特別提醒的是,擴展方法類所在的命名空間最好設置為System.Web.Mvc,這樣,我們在View中可以通過智能感知輕易找到,也不容易出錯或者無法通過VS智能感知找到我們自定義的Html輔助方法,可以為我們省去很多不必要的麻煩。將上面代碼編譯,我們即可在View中通過智能感知看到我們自定義的Html輔助方法。如下圖所示:
使用方法和其它Html輔助方法一樣,如下代碼所示:
<%: Html.Input("Path") %>//字符串參數Path代表生成標簽的name屬性和id屬性的值需要說明的是,本例所示是為了生成<input type="file">標簽,是不用設置值的,讀者可以通過自身情況定義擴展方法。然后運行,通過瀏覽器查看HTML源代碼,如下圖所示:
二、實現自定義強類型Html輔助方法
強類型輔助方法的一個好處是,我們可以通過編譯器為我們檢測一些錯誤,為我們節省一些排錯的時間與精力。所以,強類型Html輔助方法是不可缺少的。代碼如下:
代碼 publicstaticclass MyInputExtensions { publicstatic MvcHtmlString Input<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression) { string modelName = ExpressionHelper.GetExpressionText(expression);//從Lambda表達式中獲取模型對應屬性的名稱 TagBuilder tagBuilder =new TagBuilder("input");//設置標簽類型為input tagBuilder.Attributes.Add("type", "file");//為標簽添加type屬性及值 tagBuilder.Attributes.Add("name", modelName);//為標簽添加name屬性及值 tagBuilder.GenerateId(modelName);//為標簽生成Id,name參數代碼Id的值 //創建經過HTML加密的字符串 //TagRenderMode.SelfClosing枚舉值代表當前標簽是自動關閉的return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.SelfClosing)); } }然后我們編譯,在View中,我們就可以通過智能感知看到我們新擴展的強類型Html輔助方法了。如下圖所示:
我們可以通過如下代碼使用新擴展的Html輔助方法:
<%: Html.Input(model => model.Path) %>//Path代表model的Path屬性,生成標簽的name和id的屬性值均會是Path運行,我們通過瀏覽器查看生成的Html源代碼如下圖所示:
三、為標簽錯誤輸入添加CSS支持
對于要求輸入的標簽,如Text,如果用戶輸入錯誤內容,我們可以為當前標簽添加CSS錯誤提示,為用戶提供一個更加友好、人性化的界面。代碼如下所示:
代碼 ModelState modelState; if (htmlHelper.ViewData.ModelState.TryGetValue(name, out modelState)) { if (modelState.Errors.Count >0) { //添加錯誤提示CSS tagBuilder.AddCssClass(HtmlHelper.ValidationInputCssClassName); } }將以上代碼復制到我們自定義的擴展方法的返回MvcHtmlString字符串之前即可。
四、總結
本文通過演示如果實現自定義<input type="file" />標簽的Html輔助方法,展示了如何在ASP.NET MVC中實現自定義Html輔助方法。對于ASP.NET MVC程序員來說,這是非常實用的。
轉載于:https://www.cnblogs.com/freeliver54/archive/2013/04/26/3044598.html
總結
以上是生活随笔為你收集整理的[转]自定义ASP.NET MVC Html辅助方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Silverlight中如何实现上下标的
- 下一篇: 在网页中插入百度地图(实例)