擴充ASP.NET MVC HtmlHelper類

來源:互聯網
上載者:User

標籤:c   style   class   blog   code   java   

在這篇文章中我會使用一個樣本示範擴充ASP.NET MVC HtmlHelper類,讓它們可以在你的MVC視圖中工作。這個樣本中我會提供一個簡單的方案產生Html表格。

HtmlHelper類

HtmlHelper類用於在ASP.NET MVC framework中協助視圖呈現html部分。

這個類提供了一些方法,你可以使用這些方法呈現html中的一些類型(textbox,checkbox等),或者html的一部分(如form)。ASP.NET MVC framework helper有這些內容:

  • Html.ActionLink()

  • Html.BeginForm()

  • Html.CheckBox()

  • Html.DropDownList()

  • Html.EndForm()

  • Html.Hidden()

  • Html.ListBox()

  • Html.Password()

  • Html.RadioButton()

  • Html.TextArea()

  • Html.TextBox()

比如說你要顯示一個用name屬性為myChkbox並且已經勾選的複選框,可以這樣寫:

<%=Html.CheckBox(“myChkbox”, true) %>

所有的html helper都是由擴充方法建立的,設在System.Web.Mvc.Html名稱空間。

為HtmlHelper建立Html表格擴充

在本樣本中我寫了一個擴充方法,用於支援html表格的呈現。你可以修改它或者建立你自己的樣本。

 

public static class MVCHelpers
{
    public static string Table(this HtmlHelper helper, string name, IList items, IDictionary<string, object> attributes)
    {
        if (items == null || items.Count == 0 || string.IsNullOrEmpty(name))
        {                
            return string.Empty;
        }

        return BuildTable(name, items, attributes);            
    }

    private static string BuildTable(string name, IList items, IDictionary<string, object> attributes)
    {
        StringBuilder sb = new StringBuilder();
        BuildTableHeader(sb, items[0].GetType());

        foreach (var item in items)
        {
            BuildTableRow(sb, item);
        }

        TagBuilder builder = new TagBuilder("table");
        builder.MergeAttributes(attributes);
        builder.MergeAttribute("name", name);
        builder.InnerHtml = sb.ToString();            
        return builder.ToString(TagRenderMode.Normal);
    }

    private static void BuildTableRow(StringBuilder sb, object obj)
    {
        Type objType = obj.GetType();
        sb.AppendLine("/t<tr>");
        foreach (var property in objType.GetProperties())
        {
            sb.AppendFormat("/t/t<td>{0}</td>/n", property.GetValue(obj, null));
        }
        sb.AppendLine("/t</tr>");
    }

    private static void BuildTableHeader(StringBuilder sb, Type p)
    {
        sb.AppendLine("/t<tr>");
        foreach (var property in p.GetProperties())
        {
            sb.AppendFormat("/t/t<th>{0}</th>/n", property.Name);
        }
        sb.AppendLine("/t</tr>");
    }
}

 親一定要注意命名空間的使用哦 namespace System.Web.Mvc

你可以看到我如何利用擴充方法Table擴充HtmlHelper類。BuildTable方法是主要方法,它利用ASP.NET MVC TagBuilder類來建立table標籤。你可以看到在我的樣本用,我使用了反射,擷取各項的屬性列表,並且把這些屬性名稱作為表頭,它們的值填充為表格儲存格。

在視圖中使用Html.Table擴充方法

如果你想使用這個自訂html helper,只需要做這些:

  • 在視圖中用註冊helper所在的名稱空間:<%@ Import Namespace=”TaskList.Models” %>
  • 使用視圖的Html屬性中的Table方法,例如建立一個name屬性為myTable,並使用視圖中當前模型的例 子:<%=Html.Table(”myTable”, (IList)ViewData.Model, null) %>,注意Model如果不是IList,會出現異常。

 

總結

在這篇文章中我介紹了HtmlHelper類,和如何為這個類建立一個簡單的擴充方法。也可以通過建立你自己的類(如TableHelper)來擴充 HtmlHelper,你需要做的只是建立方法,並返回所要呈現的html。在我看來,使用擴充方法比較簡單一點。

 

原文轉自http://blog.csdn.net/shaily/article/details/4306200

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.