我有一个HtmlHelper扩展方法,它从数据库缓存中提取本地化文本。代码是这样的。 (MVCWeb是我的MVC应用程序的命名空间。)
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文件夹中的View文件中使用扩展方法,代码正在编译,它确实有效,但我在IDE中遇到错误。
每次我在“区域”视图中使用@Html.GetText("SomeKeyword")
时,错误列表中都会显示以下两个错误。
我已经发现在〜/ Views中,@ HTML有以下代码注释:
HtmlHelper<dynamic> WebViewPage<dynamic>.Html
Gets or sets the System.Web.Mvc.HtmlHelper object that is used to render HTML elements.
在〜/ Area / AreaName / Views中,@ HTML有以下注释:
HtmlHelper WebPage.Html
Gets the System.Web.WebPages.Html.HtmlHelper object that is associated with a page.
作为参考,〜/ Views和〜/ Areas / AreaName / Views中的Web.config文件匹配。这是.NET 4.5上的MVC4应用程序,尚未从以前版本的MVC转换。
答案 0 :(得分:1)
它运行正常,因为您的web.config包含正确的引用,并且它在运行时正确匹配。
这只是区域的一个ide错误。要摆脱它,您可以使用@include将其指定为视图顶部的包含,这将为智能感知提供帮助。
答案 1 :(得分: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>