zoukankan      html  css  js  c++  java
  • 扩展ASP.NET MVC HtmlHelper类

    在这篇帖子中我会使用一个示例演示扩展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<stringobject> 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<stringobject> 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

  • 相关阅读:
    信息安全[0836]
    05 二极管的微变等效和稳压二极管
    04 二极管的直流等效通路
    STM32 ADS112C04
    03 PN与二极管的特性
    STM32中的程序在RAM还是FLASH里运行?
    基于STM32的MLX90614人体红外测温枪
    KEIL5如何打开KEIL4工程 [复制链接]
    02 PN结的形成
    PreparedStatement和Statament的性能
  • 原文地址:https://www.cnblogs.com/guojian/p/3761033.html
Copyright © 2011-2022 走看看