MVC标签链接切换帮助类: TabLink

简介:

写Tab时为了保证慢加载下tab输出不乱必须在服务端写,然后就是出现了很多难看的if else,今天花了点时间写了个帮助类,跟ActionLink的使用一样。

示例代码:

<ul>
     <li>@Html.TabLink( "新闻" , "s" , new  { t = "n"  }, new  { onclick = "return  channelSwitch('n');"  }, "tab_selected" )</li>
     <li>@Html.TabLink( "全部" , "s" , new  { t = ""  }, new  { onclick = "return  channelSwitch(0);"  }, "tab_selected" )</li>
     <li>@Html.TabLink( "博客" , "s" , new  { t = "b"  }, new  { onclick = "return  channelSwitch('b');"  }, "tab_selected" )</li>
     <li>@Html.TabLink( "知识库" , "s" , new  { t = "k"  }, new  { onclick = "return  channelSwitch('k');"  }, "tab_selected" )</li>
     <li>@Html.TabLink( "博问" , "s" , new  { t = "q"  }, new  { onclick = "return  channelSwitch('q');"  }, "tab_selected" )</li>
</ul>

TabLink代码:

#region TabLinks
 
public  static  MvcHtmlString TabLink( this  HtmlHelper htmlHelper, string  linkText, string  actionName, string  controllerName = null , string  currentClass = "current" )
{
     return  TabLink(htmlHelper, linkText, actionName, controllerName, new  RouteValueDictionary(), new  RouteValueDictionary(), currentClass);
}
 
public  static  MvcHtmlString TabLink( this  HtmlHelper htmlHelper, string  linkText, string  actionName, object  routeValues, string  currentClass = "current" )
{
     return  TabLink(htmlHelper, linkText, actionName, null  /* controllerName */ , new  RouteValueDictionary(routeValues), new  RouteValueDictionary(), currentClass);
}
 
public  static  MvcHtmlString TabLink( this  HtmlHelper htmlHelper, string  linkText, string  actionName, object  routeValues, object  htmlAttributes, string  currentClass = "current" )
{
     return  TabLink(htmlHelper, linkText, actionName, null  /* controllerName */ , new  RouteValueDictionary(routeValues), HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes), currentClass);
}
 
public  static  MvcHtmlString TabLink( this  HtmlHelper htmlHelper, string  linkText, string  actionName, RouteValueDictionary routeValues, string  currentClass = "current" )
{
     return  TabLink(htmlHelper, linkText, actionName, null  /* controllerName */ , routeValues, new  RouteValueDictionary(), currentClass);
}
 
public  static  MvcHtmlString TabLink( this  HtmlHelper htmlHelper, string  linkText, string  actionName, RouteValueDictionary routeValues, IDictionary< string , object > htmlAttributes, string  currentClass = "current" )
{
     return  TabLink(htmlHelper, linkText, actionName, null  /* controllerName */ , routeValues, htmlAttributes, currentClass);
}
 
public  static  MvcHtmlString TabLink( this  HtmlHelper htmlHelper, string  linkText, string  actionName, string  controllerName, object  routeValues, object  htmlAttributes, string  currentClass = "current" )
{
     return  TabLink(htmlHelper, linkText, actionName, controllerName, new  RouteValueDictionary(routeValues), HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes), currentClass);
}
 
public  static  MvcHtmlString TabLink( this  HtmlHelper htmlHelper, string  linkText, string  actionName, string  controllerName, RouteValueDictionary routeValues, IDictionary< string , object > htmlAttributes, string  currentClass = "current" )
{
     if  (String.IsNullOrEmpty(linkText))
     {
         throw  new  ArgumentException( "Value cannot be null or empty." , "linkText" );
     }
 
     if  (IsCurrent(htmlHelper, actionName, controllerName, routeValues))
     {
         htmlAttributes = htmlAttributes ?? new  Dictionary< string , object >();
         string  classValue = currentClass;
         if  (htmlAttributes.ContainsKey( "class" ))
         {
             classValue = htmlAttributes[ "class" ] + classValue;
         }
         htmlAttributes[ "class" ] = classValue;
     }
 
     return  MvcHtmlString.Create(HtmlHelper.GenerateLink(htmlHelper.ViewContext.RequestContext, htmlHelper.RouteCollection, linkText, null  /* routeName */ , actionName, controllerName, routeValues, htmlAttributes));
}
 
public  static  MvcHtmlString TabLink( this  HtmlHelper htmlHelper, string  linkText, string  actionName, string  controllerName, string  protocol, string  hostName, string  fragment, object  routeValues, object  htmlAttributes, string  currentClass = "current" )
{
     return  TabLink(htmlHelper, linkText, actionName, controllerName, protocol, hostName, fragment, new  RouteValueDictionary(routeValues), HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes), currentClass);
}
 
public  static  MvcHtmlString TabLink( this  HtmlHelper htmlHelper, string  linkText, string  actionName, string  controllerName, string  protocol, string  hostName, string  fragment, RouteValueDictionary routeValues, IDictionary< string , object > htmlAttributes, string  currentClass = "current" )
{
     if  (String.IsNullOrEmpty(linkText))
     {
         throw  new  ArgumentException( "Value cannot be null or empty." , "linkText" );
     }
 
     if  (IsCurrent(htmlHelper, actionName, controllerName, routeValues))
     {
         htmlAttributes = htmlAttributes ?? new  Dictionary< string , object >();
         string  classValue = currentClass;
         if  (htmlAttributes.ContainsKey( "class" ))
         {
             classValue = htmlAttributes[ "class" ] + classValue;
         }
         htmlAttributes[ "class" ] = classValue;
     }
 
     return  MvcHtmlString.Create(HtmlHelper.GenerateLink(htmlHelper.ViewContext.RequestContext, htmlHelper.RouteCollection, linkText, null  /* routeName */ , actionName, controllerName, protocol, hostName, fragment, routeValues, htmlAttributes));
}
 
private  static  bool  IsCurrent( this  HtmlHelper htmlHelper, string  actionName, string  controllerName, RouteValueDictionary routeValues)
{
     var  isCurrent = htmlHelper.RouteValue( "action" ).ToLower() == actionName.ToLower();
     if  (! string .IsNullOrEmpty(controllerName))
     { isCurrent &= htmlHelper.RouteValue( "controller" ).ToLower() == controllerName.ToLower(); }
 
     if  (routeValues == null )
     {
         return  isCurrent;
     }
 
     var  rvEnum = routeValues.GetEnumerator();
 
     while  (isCurrent && rvEnum.MoveNext())
     {
         isCurrent = rvEnum.Current.Value.ToString().ToLower() == htmlHelper.RouteValue(rvEnum.Current.Key).ToLower();
     }
 
     return  isCurrent;
}
 
private  static  string  RouteValue( this  HtmlHelper htmlHelper, string  key)
{
     var  v = htmlHelper.ViewContext.Controller.ValueProvider.GetValue(key);
     if (v== null )
         return  string .Empty;
     return   v.ConvertTo( typeof  ( string )) as  string ;
}
#endregion

  


本文转自today4king博客园博客,原文链接:http://www.cnblogs.com/jinzhao/archive/2012/07/23/2605401.html,如需转载请自行联系原作者

相关文章
|
前端开发 Java API
Spring MVC相关异常类
Spring MVC相关异常类
73 0
|
5月前
|
前端开发 JavaScript
MVC中简单数据模型(M): Model类
MVC中简单数据模型(M): Model类
|
8月前
ssm(Spring+Spring mvc+mybatis)Service层实现类——DeptServiceImpl
ssm(Spring+Spring mvc+mybatis)Service层实现类——DeptServiceImpl
|
8月前
ssm(Spring+Spring mvc+mybatis)Dao层实现类——DeptDaoImpl
ssm(Spring+Spring mvc+mybatis)Dao层实现类——DeptDaoImpl
|
8月前
|
缓存 前端开发 Java
【Spring底层原理高级进阶】轻松掌握 Spring MVC 的拦截器机制:深入理解 HandlerInterceptor 接口和其实现类的用法
【Spring底层原理高级进阶】轻松掌握 Spring MVC 的拦截器机制:深入理解 HandlerInterceptor 接口和其实现类的用法
|
8月前
|
XML 前端开发 Java
SpringMVC中<mvc:annotation-driven/>标签原理与实践详解
SpringMVC中<mvc:annotation-driven/>标签原理与实践详解
167 0
|
8月前
|
存储 前端开发 Java
Spring Boot中Spring MVC的表单标签库与数据绑定讲解与实战(附源码 超详细必看)
Spring Boot中Spring MVC的表单标签库与数据绑定讲解与实战(附源码 超详细必看)
107 0
|
JSON 前端开发 Java
30个类手写Spring核心原理之MVC映射功能(4)
接下来我们来完成MVC模块的功能,应该不需要再做说明。Spring MVC的入口就是从DispatcherServlet开始的,而前面的章节中已完成了web.xml的基础配置。下面就从DispatcherServlet开始添砖加瓦。
54 0
|
XML NoSQL Java
干掉 CRUD!这个API开发神器效率爆炸,无需定义MVC类!!
magic-api 能够只通过 UI 界面就能完成简单常用的接口开发,能够支持市面上多数的关系性数据库,甚至还支持非关系性数据库 MongoDB。 通过 magic-api 提供的 UI 界面完成接口的开发,自动映射为 HTTP 接口,无需定义 Controller、Service、Dao、Mapper、XML、VO 等 Java 对象和相关文件! 该项目已经有上千家公司使用,上万名开发者使用,并有上百名程序员提交建议,20+ 贡献者,是非常值得信赖的项目!
|
开发框架 前端开发 安全
ASP.NET Core MVC 从入门到精通之Html辅助标签补充及模型校验基础
ASP.NET Core MVC 从入门到精通之Html辅助标签补充及模型校验基础
129 0