使用RouteValueDictionary简化对Asp.net MVC Helper的扩展
2013-02-28 10:48
513 查看
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的扩展
- 【译】使用自定义ViewHelper来简化Asp.net MVC view的开发------part5(完)
- [ASP.NET MVC]通过对HtmlHelper扩展简化“列表控件”的绑定
- [ASP.NET MVC]通过对HtmlHelper扩展简化“列表控件”的绑定
- ASP.NET MVC 使用总结(二)——扩展HtmlHelper实现动态生成title及meta
- 【译】使用自定义ViewHelper来简化Asp.net MVC view的开发------part4
- [ASP.NET MVC]通过对HtmlHelper扩展简化“列表控件”的绑定
- 【译】使用自定义ViewHelper来简化Asp.net MVC view的开发------part3
- dhl: 在 ASP.NET MVC 中创建自定义 HtmlHelper 使用扩展方法创建 HTML Helper
- ASP.NET MVC 使用总结(二)——扩展HtmlHelper实现动态生成title及meta
- 【译】使用自定义ViewHelper来简化Asp.net MVC view的开发------part2
- 【译】使用自定义ViewHelper来简化Asp.net MVC view的开发------part1
- 使用自定义ViewHelper来简化Asp.net MVC view的开发-索引
- [转]ASP.NET MVC HtmlHelper扩展之Calendar日期时间选择
- ASP.NET MVC 扩展服务器控件使用方式
- ASP.NET MVC HtmlHelper 类的扩展方法
- 在Asp.Net MVC中使用ModelBinding构造Array、List、Collection以及Dictionary
- ASP.Net MVC开发基础学习笔记(2):HtmlHelper与扩展方法
- asp.net MVC添加HtmlHelper扩展示例和用法
- [转]使用XML文件来动态配置ASP.NET MVC的Route规则