2014-12-02 35 views
8

我试图将此代码移植到mvc 6,任何帮助表示赞赏,代码编译但该方法在@Html.IsActive我的视图中不可用。MVC中的HtmlHelpers 6

using Microsoft.AspNet.Mvc.Rendering; 

namespace Blah.Web.Helpers 
{ 
    public static class HtmlHelpers 
    { 

     public static string IsActive(this HtmlHelper htmlHelper, string controller, string action) 
     { 
      var routeData = htmlHelper.ViewContext.RouteData; 

      var routeAction = routeData.Values["action"].ToString(); 
      var routeController = routeData.Values["controller"].ToString(); 

      var returnActive = (controller == routeController && action == routeAction); 

      return returnActive ? "active" : ""; 
     } 

    } 
} 

在查看我引用的命名空间:

@using Blah.Web.Helpers; 
+3

有你加入'@在你的视图中使用Blah.Web.Helpers'? – 2014-12-02 19:23:47

+1

是的,我有。对不起,没有发布该信息。 – RickJames 2014-12-02 19:24:43

+7

HtmlHelper应该是IHtmlHelper – 2014-12-02 19:46:37

回答

18

在方法签名,HtmlHelper应该是IHtmlHelper

见下面的例子

namespace Blah.Web.Helpers 
{ 
    public static class HtmlHelpers 
    { 
     public static string IsActive(this IHtmlHelper htmlHelper, string controller, string action) 
     { 
      var routeData = htmlHelper.ViewContext.RouteData; 

      var routeAction = routeData.Values["action"].ToString(); 
      var routeController = routeData.Values["controller"].ToString(); 

      return (controller == routeController && action == routeAction) ? "active" : ""; 
     } 
    } 
} 
+2

请考虑编辑此答案,以便第一行读取类似于'在方法标志中,'HtmlHelper'应该是'IHtmlHelper'。这将有助于其他用户比较代码Q + A代码片段。 – 2015-09-22 03:16:03

+0

更新问题tahnks的推荐 – 2015-09-25 13:45:18

+0

这是MVC 6的新要求吗?在我的MVC 4应用程序中,我不使用接口版本,一切正常。 – ganders 2016-04-06 12:52:26