加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – HtmlHelper获取路由名称

发布时间:2020-12-16 09:57:43 所属栏目:asp.Net 来源:网络整理
导读:我创建了一个html帮助程序,如果用户在当前页面上,则会向li项添加css类属性.助手看起来像这样: public static string MenuItem( this HtmlHelper helper,string linkText,string actionName,string controllerName,object routeValues,object htmlAttributes
我创建了一个html帮助程序,如果用户在当前页面上,则会向li项添加css类属性.助手看起来像这样:

public static string MenuItem( this HtmlHelper helper,string linkText,string actionName,string controllerName,object routeValues,object htmlAttributes )
{
    string currentControllerName = 
     ( string )helper.ViewContext.RouteData.Values["controller"];
    string currentActionName = 
     ( string )helper.ViewContext.RouteData.Values["action"];

    var builder = new TagBuilder( "li" );

    // Add selected class
    if ( currentControllerName.Equals( controllerName,StringComparison.CurrentCultureIgnoreCase ) && 
          currentActionName.Equals( actionName,StringComparison.CurrentCultureIgnoreCase ) )
        builder.AddCssClass( "active" );

    // Add link
    builder.InnerHtml = helper.ActionLink( linkText,actionName,controllerName,routeValues,htmlAttributes );

    // Render Tag Builder
    return builder.ToString( TagRenderMode.Normal );
}

我想扩展这个类,以便我可以将路由名称传递给帮助程序,如果用户在该路由上,则将css类添加到li项目.但是我很难找到用户所在的路线.这可能吗?我到目前为止的代码是:

public static string MenuItem( this HtmlHelper helper,string routeName,object htmlAttributes )
{
    string currentControllerName = 
      ( string )helper.ViewContext.RouteData.Values["controller"];
    string currentActionName = 
      ( string )helper.ViewContext.RouteData.Values["action"];

    var builder = new TagBuilder( "li" );

    // Add selected class
    // Some code for here
    // if ( routeName == currentRoute ) AddCssClass;

    // Add link
    builder.InnerHtml = helper.RouteLink( linkText,routeName,htmlAttributes );

    // Render Tag Builder
    return builder.ToString( TagRenderMode.Normal );
}

顺便说一下,我正在使用MVC 1.0.

谢谢

解决方法

名称不是直接的路由属性;它们只是集合将字符串映射到路径的一种方式.因此,您无法从当前路线获取路线名称.

但您可以比较路线本身而不是使用名称.由于您具有当前的RouteBase实例(可以通过HtmlHelper.ViewContext.RouteData.Route获取)和RouteCollection(通过HtmlHelper.RouteCollection),因此可以使用RouteCollection.Item获取与目标路径名对应的RouteBase.将返回的RouteBase实例与当前RouteBase实例进行比较.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读