4

我有一個HtmlHelper擴展方法,它從數據庫緩存中提取本地化的文本。代碼就是這樣。 (MVCWeb是我的MVC應用程序的命名空間。)在區域內的視圖中使用MVC HtmlHelper擴展方法

using System.Web; 
using System.Web.Mvc; 

namespace MVCWeb.PresentationExtensions 
{ 
    public static class HtmlHelperExtensions 
    { 
     public static HtmlString GetText(this HtmlHelper Html, string keyword) 
     { 
      // code to get the text based on the keyword 
     } 
    } 
} 

我使用我的觀點@using MVCWeb.PresentationExtensions。在〜/ Views文件夾中,調用擴展方法是完美的。

我最近添加了一個區域。我在〜/ Areas/AreaName/Views文件夾中的視圖文件中使用了擴展方法,並且代碼正在編譯,並且可以正常工作,但是我在IDE中收到錯誤。

我每次使用@Html.GetText("SomeKeyword")從區域視圖中,會顯示錯誤名單上有以下兩個錯誤。

  • 「System.Web.WebPages.Html.HtmlHelper」不包含關於「的getText」的定義和最佳的擴展方法過載「MVCWeb.PresenationExtension.HtmlHelperExtensions.GetText(System.Web.Mvc.HtmlHelper,串)」有一些無效參數
  • 實例參數:無法從轉換‘System.Web.WebPages.Html.HtmlHelper’到‘System.Web.Mvc.HtmlHelper’

我已經想通了,在〜 /瀏覽次數,@Html有以下代碼註釋:

HtmlHelper<dynamic> WebViewPage<dynamic>.Html 
Gets or sets the System.Web.Mvc.HtmlHelper object that is used to render HTML elements. 

在〜/地區/ AREANAME /瀏覽次數,@Html有這些評論:

HtmlHelper WebPage.Html 
Gets the System.Web.WebPages.Html.HtmlHelper object that is associated with a page. 

僅供參考,我的web.config文件在〜/瀏覽次數和〜/地區/ AREANAME /瀏覽次數匹配。這是.NET 4.5上的MVC4應用程序,並未從MVC的先前版本轉換。

  • @Html在常規視圖和區域視圖中被定義爲不同類型是否正常?
  • 如果IDE顯示錯誤,爲什麼編譯和運行正確?這是一個IDE錯誤?
  • 如何阻止這些錯誤在IDE中顯示?

回答

1

它運行良好,因爲您的web.config包含正確的引用,並且它在運行時正確匹配。

這只是一個區域的IDE錯誤。爲了擺脫它,您可以使用@include將它指定爲視圖頂部的包含,這將使intellisense成爲助手。

1

我剛剛碰到同樣的問題,試圖以一個MvcSiteMap助手添加到區域中的視圖。

問題在於NuGet包在根目錄和視圖級別將它的命名空間添加到了Web.Config文件,但不出所料,它們不夠聰明,無法查找埋在Areas/area_name/Views文件夾中的命名空間。解決方案只是添加命名空間,例如

<system.web.webPages.razor> 
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.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="FarmingtonCo.CacPortalWeb" /> 
    <add namespace="MvcSiteMapProvider.Web.Html" /> 
    <add namespace="MvcSiteMapProvider.Web.Html.Models" /> 
    </namespaces> 
</pages> 

相關問題