2014-12-02 77 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