扩展ASP.NET MVC HtmlHelper类
来源:互联网 发布:三星9008端口刷机模式 编辑:程序博客网 时间:2024/05/22 10:19
原文地址:Extending ASP.NET MVC HtmlHelper Class
在这篇帖子中我会使用一个示例演示扩展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 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>");
}
}
你可以看到我如何利用扩展方法Table扩展HtmlHelper类。BuildTable方法是主要方法,它利用ASP.NET MVC TagBuilder类来创建table标签。你可以看到在我的示例用,我使用了反射,获取各项的属性列表,并且把这些属性名称作为表头,它们的值填充为表格单元格。
在视图中使用Html.Table扩展方法
如果你想使用这个自定义html helper,只需要做这些:
- 在视图中用注册helper所在的名称空间:<%@ Imp
ort Namespace=”TaskList.Models” %> - 使用视图的Html属性中的Table方法,例如创建一个name属性为myTable,并使用视图中当前模型的例 子:<%=Html.Table(”myTable”, (IList)ViewData.Model, null) %>,注意Model如果不是IList,会出现异常。
总结
在这篇帖子中我介绍了HtmlHelper类,和如何为这个类创建一个简单的扩展方法。也可以通过创建你自己的类(如TableHelper)来扩展 HtmlHelper,你需要做的只是创建方法,并返回所要呈现的html。在我看来,使用扩展方法比较简单一点。
- 扩展ASP.NET MVC HtmlHelper类
- 扩展ASP.NET MVC HtmlHelper类
- asp.net mvc htmlhelper扩展
- 扩展ASP.NET MVC HtmlHelper类(翻的)
- asp.net mvc 分页控件:HtmlHelper扩展
- asp.net mvc htmlhelper 扩展方法
- ASP.NET MVC HtmlHelper如何扩展
- ASP.net MVC--Htmlhelper
- ASP.NET MVC HtmlHelper
- Asp.Net Mvc4分页,扩展HtmlHelper类
- Asp.net MVC HtmlHelper类 @html 用法
- 新版asp.net mvc 分页控件:HtmlHelper扩展
- ASP.NET MVC HtmlHelper扩展之Calendar日期时间选择
- ASP.NET MVC 之 HtmlHelper
- C# ASP.NET MVC HtmlHelper
- Asp.net MVC HtmlHelper学习
- .NET MVC 扩展 HtmlHelper 从无到有(一)
- ASP.NET MVC的帮助类HtmlHelper和UrlHelper
- 动态规划算法之免费馅饼问题
- smarty复习
- ASP.NET MVC中你必须知道的13个扩展点
- 学习
- linux下sort命令使用详解
- 扩展ASP.NET MVC HtmlHelper类
- SPOJ375.QTREE
- 参考文献的格式
- Tamarin
- ubuntu安装boost1.44
- Apache+Tomcat集群 负载均衡
- 动态引用Web Service
- smarty总结
- [简历杂谈] 想进500强,英文简历全攻略