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

  • 相关阅读:
    tuple 元组及字典dict
    day 49 css属性补充浮动 属性定位 抽屉作业
    day48 选择器(基本、层级 、属性) css属性
    day47 列表 表单 css初识
    day 46 http和html
    day 45索引
    day 44 练习题讲解 多表查询
    day 40 多表查询 子查询
    day39 表之间的关联关系、 补充 表操作总结 where 、group by、
    day38 数据类型 约束条件
  • 原文地址:https://www.cnblogs.com/guojian/p/3761033.html
Copyright © 2011-2022 走看看