C# 在区域内的视图中使用MVC HtmlHelper扩展方法
我有一个HtmlHelper扩展方法,可以从数据库缓存中提取本地化文本。代码是这样的。(MVCWeb是我的MVC应用程序的名称空间。) 我正在视图中使用MVCWeb.PresentationExtensionsC# 在区域内的视图中使用MVC HtmlHelper扩展方法,c#,asp.net-mvc-4,extension-methods,html-helper,asp.net-mvc-areas,C#,Asp.net Mvc 4,Extension Methods,Html Helper,Asp.net Mvc Areas,我有一个HtmlHelper扩展方法,可以从数据库缓存中提取本地化文本。代码是这样的。(MVCWeb是我的MVC应用程序的名称空间。) 我正在视图中使用MVCWeb.PresentationExtensions。在~/Views文件夹中,调用扩展方法非常有效 我最近添加了一个区域。我在~/Areas/AreaName/Views文件夹中的视图文件中使用扩展名方法,代码正在编译,它确实可以工作,但是我在IDE中遇到了错误 每次在区域视图中使用@Html.GetText(“some关键字”)时,错误
。在~/Views文件夹中,调用扩展方法非常有效
我最近添加了一个区域。我在~/Areas/AreaName/Views文件夹中的视图文件中使用扩展名方法,代码正在编译,它确实可以工作,但是我在IDE中遇到了错误
每次在区域视图中使用@Html.GetText(“some关键字”)
时,错误列表中会显示以下两个错误
- “System.Web.WebPages.Html.HtmlHelper”不包含“GetText”的定义,并且最佳扩展方法重载“MVCWeb.PresentationExtension.HtmlHelperExtensions.GetText(System.Web.Mvc.HtmlHelper,string)”具有一些无效参数
- 实例参数:无法从“System.Web.WebPages.Html.HtmlHelper”转换为“System.Web.Mvc.HtmlHelper”
我发现在~/Views中,@Html有以下代码注释:
HtmlHelper<dynamic> WebViewPage<dynamic>.Html
Gets or sets the System.Web.Mvc.HtmlHelper object that is used to render HTML elements.
HtmlHelper WebPage.Html
Gets the System.Web.WebPages.Html.HtmlHelper object that is associated with a page.
作为参考,我的Web.config文件在~/Views和~/Areas/AreaName/Views中匹配。这是.NET 4.5上的MVC4应用程序,尚未从以前的MVC版本转换而来
- 在常规视图和区域视图中,@Html被定义为不同的类型,这正常吗
- 如果IDE显示错误,为什么编译和运行会正确?这是一个IDE错误吗
- 如何阻止这些错误显示在IDE中
它运行良好,因为您的web.config包含正确的引用,并且在运行时匹配正确
这只是一个ide领域的bug。要摆脱它,您可以使用@include将其指定为视图顶部的include,这将为intellisense提供帮助。我刚刚遇到同样的问题,试图将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>
<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>