您的位置:首页 > 编程语言 > ASP

使用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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: