使用RouteValueDictionary简化对Asp.net MVC Helper的扩展

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);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值