使用RouteValueDictionary简化对Asp.net MVC Helper的扩展
2009-04-27 11:58
555 查看
Asp.net MVC中提供的大量的Helper,比如下面的Helper:
public static string ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, object routeValues, object htmlAttributes)
实际开发中我们也不可避免对Helper进行扩展,比如扩展一个 Link 方法 (MVC本身只提供了ActionLink与RouteLink,对最普通的Link没有扩展)
public static string Link(this HtmlHelper htmlHelper, string linkText, string linkHref, object htmlAttributes)
{
.
}
这里面有个 htmlAttribute ,在C#3.0中就是所谓的“匿名类型”,它可以允许用户调用此方法时这样写:
<%=Html.Link("CaraQ","http://www.caraq.com",new {@class="home",target="_blank"}) %>
那么在Link方法中如何知道用户到底指定了哪些html属性、值呢?
经过查看MVC源码发现它是使用了一个RouteValueDictionary类,这个类在System.Web.Routing组件中定义的,所以可以如下方式获得用户指定的html属性值:
public static string Link(this HtmlHelper htmlHelper, string linkText, string linkHref, object htmlAttributes)
{
string reval = "<a href=\"{0}\" {1}>{2}</a>";
StringBuilder builder = new StringBuilder();
foreach(var item in new RouteValueDictionary(htmlAttributes))
{
builder.Append(item.Key + "=\"" + item.Value + "\" ");
}
return string.Format(reval,linkHref,builder.ToString(),linkText);
}
public static string ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, object routeValues, object htmlAttributes)
实际开发中我们也不可避免对Helper进行扩展,比如扩展一个 Link 方法 (MVC本身只提供了ActionLink与RouteLink,对最普通的Link没有扩展)
public static string Link(this HtmlHelper htmlHelper, string linkText, string linkHref, object htmlAttributes)
{
.
}
这里面有个 htmlAttribute ,在C#3.0中就是所谓的“匿名类型”,它可以允许用户调用此方法时这样写:
<%=Html.Link("CaraQ","http://www.caraq.com",new {@class="home",target="_blank"}) %>
那么在Link方法中如何知道用户到底指定了哪些html属性、值呢?
经过查看MVC源码发现它是使用了一个RouteValueDictionary类,这个类在System.Web.Routing组件中定义的,所以可以如下方式获得用户指定的html属性值:
public static string Link(this HtmlHelper htmlHelper, string linkText, string linkHref, object htmlAttributes)
{
string reval = "<a href=\"{0}\" {1}>{2}</a>";
StringBuilder builder = new StringBuilder();
foreach(var item in new RouteValueDictionary(htmlAttributes))
{
builder.Append(item.Key + "=\"" + item.Value + "\" ");
}
return string.Format(reval,linkHref,builder.ToString(),linkText);
}
相关文章推荐
- 使用RouteValueDictionary简化对Asp.net MVC Helper的扩展
- [ASP.NET MVC]通过对HtmlHelper扩展简化“列表控件”的绑定
- 使用自定义ViewHelper来简化Asp.net MVC view的开发-索引
- 【译】使用自定义ViewHelper来简化Asp.net MVC view的开发------part4
- ASP.NET MVC 使用总结(二)——扩展HtmlHelper实现动态生成title及meta
- dhl: 在 ASP.NET MVC 中创建自定义 HtmlHelper 使用扩展方法创建 HTML Helper
- 【译】使用自定义ViewHelper来简化Asp.net MVC view的开发------part5(完)
- [ASP.NET MVC]通过对HtmlHelper扩展简化“列表控件”的绑定
- 【译】使用自定义ViewHelper来简化Asp.net MVC view的开发------part3
- ASP.NET MVC 使用总结(二)——扩展HtmlHelper实现动态生成title及meta
- [ASP.NET MVC]通过对HtmlHelper扩展简化“列表控件”的绑定
- 【译】使用自定义ViewHelper来简化Asp.net MVC view的开发------part2
- 【译】使用自定义ViewHelper来简化Asp.net MVC view的开发------part1
- ASP.NET MVC HtmlHelper扩展之Calendar日期时间选择
- ASP.Net MVC开发基础学习笔记(2):HtmlHelper与扩展方法
- 转:ASP.NET MVC扩展之HtmlHelper辅助方法
- [ASP.net MVC] 将HTML转成PDF档案,使用iTextSharp套件的XMLWorkerHelper (附上解决显示中文问题)
- 使用XML文件来动态配置ASP.NET MVC的Route规则
- 新版asp.net mvc 分页控件:HtmlHelper扩展
- 扩展ASP.NET MVC三层框架并使用StructureMap实现依赖注入2