解決 ASP.NET MVC 的 HtmlHelper 找不到的錯誤

這應該是剛開始學ASP.NET MVC 常犯的錯誤,一般我們會新增一個資料夾”Helpers”來放 HtmlHelper的程式,如在資料夾新增一個class,如:HMTLHelperExtensions.cs。

using System;
using System.Web.Mvc;

namespace DemoCustomIndentity.Helpers
{
    public static class HMTLHelperExtensions
    {
       public static string IsSelected(this HtmlHelper html, string controller = null, string action = null, string cssClass = null)
       {

          if (String.IsNullOrEmpty(cssClass))
          cssClass = "active";

          string currentAction = (string)html.ViewContext.RouteData.Values["action"];
          string currentController = (string)html.ViewContext.RouteData.Values["controller"];

          if (String.IsNullOrEmpty(controller))
          controller = currentController;

         if (String.IsNullOrEmpty(action))
         action = currentAction;

         return controller == currentController && action == currentAction ?
         cssClass : String.Empty;
       }

    public static string PageClass(this HtmlHelper html)
    {
       string currentAction = (string)html.ViewContext.RouteData.Values["action"];
       return currentAction;
     }
   }
}

當你將程式跑起來時,有時會得到下面的錯誤畫面

解決方法也下列幾種方式 :

第一種方法是在Views/Web.config 增加命名空間

<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing" />
<add namespace="DemoCustomIndentity" />
<!-- 增加這一行 -->
<add namespace="DemoCustomIndentity.Helpers" />
</namespaces>
</pages>
</system.web.webPages.razor>

第二種方法是改變 HMTLHelperExtensions.cs命名空間,”Helpers” 拿掉,或者直接將命名空間改成 “System.Web.Mvc.Html”

using System;
using System.Web.Mvc;

namespace DemoCustomIndentity
{
    public static class HMTLHelperExtensions
    {
       ......
   }
}

using System;
using System.Web.Mvc;

namespace System.Web.Mvc.Html
{
    public static class HMTLHelperExtensions
    {
       ......
   }
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *