【草稿】自定義ASP.NET MVC Html輔助方法

https://www.cnblogs.com/myshell/archive/2010/05/09/1731269.htmlhtml


 

 在ASP.NET MVC中,Html輔助方法給咱們程序員帶來不少方便,其重要性也就不言自明。有時候,咱們不想重複地寫一些HTML代碼,或者MS沒有提供咱們想要的那個HTML標籤的Html輔助方法,那麼,咱們就能夠經過本身定義一個Html擴展方法來達到這個目的。程序員

  好比,到目前爲止,Html擴展方法中沒有關於<input type="file" />這類標籤的輔助方法,那麼咱們就能夠自已實現一個。本文以實現<input type="file" />標籤爲例,演示如何實現自定義Html擴展方法。shell

  1、實現自定義弱類型Html擴展方法express

  其實實現自定義Html擴展方法並不難,有興趣的同窗能夠去看下MVC源代碼,關於Html擴展方法部分。要用到System.Web.Mvc命名空間下的TagBuilder類,MvcHtmlString類。TagBuilder類爲Html輔助方法生成HTML標籤,MvcHtmlString表明HTML編碼的字符串。擴展方法代碼以下所示:瀏覽器

複製代碼
代碼
public static class MyInputExtensions
{
public static 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輔助方法。以下圖所示:ui

  使用方法和其它Html輔助方法同樣,以下代碼所示:this

<%: Html.Input("Path") %>
//字符串參數Path表明生成標籤的name屬性和id屬性的值

 須要說明的是,本例所示是爲了生成<input type="file">標籤,是不用設置值的,讀者能夠經過自身狀況定義擴展方法。而後運行,經過瀏覽器查看HTML源代碼,以下圖所示:編碼

  2、實現自定義強類型Html輔助方法加密

  強類型輔助方法的一個好處是,咱們能夠經過編譯器爲咱們檢測一些錯誤,爲咱們節省一些排錯的時間與精力。因此,強類型Html輔助方法是不可缺乏的。代碼以下:spa

複製代碼
代碼
public static class MyInputExtensions
{
public static 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源代碼以下圖所示:

  

  3、爲標籤錯誤輸入添加CSS支持

  對於要求輸入的標籤,如Text,若是用戶輸入錯誤內容,咱們能夠爲當前標籤添加CSS錯誤提示,爲用戶提供一個更加友好、人性化的界面。代碼以下所示:

複製代碼
代碼
ModelState modelState;
if (htmlHelper.ViewData.ModelState.TryGetValue(name, out modelState))
{
if (modelState.Errors.Count > 0)
{
//添加錯誤提示CSS
tagBuilder.AddCssClass(HtmlHelper.ValidationInputCssClassName);
}
}
複製代碼

  將以上代碼複製到咱們自定義的擴展方法的返回MvcHtmlString字符串以前便可。

  4、總結

  本文經過演示若是實現自定義<input type="file" />標籤的Html輔助方法,展現瞭如何在ASP.NET MVC中實現自定義Html輔助方法。對於ASP.NET MVC程序員來講,這是很是實用的。

相關文章
相關標籤/搜索