MVC2 扩展方法在我的视图中引发错误

Posted

技术标签:

【中文标题】MVC2 扩展方法在我的视图中引发错误【英文标题】:MVC2 Extension Methods throwing errors in my views 【发布时间】:2011-11-21 17:22:41 【问题描述】:

我有一个用 MVC2 和 VB.NET 编写的项目。我使用了很多 htmlhelper 扩展方法,我把它们都放在一个公共模块中。它们工作得很好,我可以编译和运行我的项目。我用这个引用他们所在的命名空间:

<%@ Import Namespace="MyProject.WebUI.Extensions" %>

因此,它们再次运行良好,我的项目可以顺利运行和编译。

问题是这些扩展方法中的每一个都显示为错误:

错误 33“TabbedMenu”不是“System.Web.Mvc.HtmlHelper(Of Object)”的成员。 C:\Projects\MyProject\MyProject.WebUI\Views\Shared\Site.Master 23 21 MyProject.WebUI

这并不会阻止项目编译和运行,它只会产生一个错误,这很烦人。我尝试寻找解决方案,但我发现的所有解决方案都是针对无法编译的项目,所有解决方案都具有简单的解决方案,例如引用正确的命名空间或确保您的模块被声明为公共的。有什么想法吗?

【问题讨论】:

【参考方案1】:

您是否在 site.Master 中包含了 import 语句以包含定义扩展的扩展类。另外我假设你的扩展类是一个公共静态类,定义了公共静态方法?

如果您还没有,也请检查一下,这可能与您所追求的有关。

How do I use an extension method in an ASP.NET MVC View?

【讨论】:

首先,如果我不导入命名空间,项目就不会像我说的那样运行(见上面的评论)。其次,这是在 VB.NET 中。扩展方法必须在自动定义共享方法的模块中。同样,该网站运行良好,扩展方法也是如此。他们只是在编译时间之前抛出错误......尽管他们最终会编译。 也许如果您发布了一个 Extensions 类的示例和一个无法更深入地了解潜在问题可能是什么的方法?从你所说的来看,它似乎应该工作。 它工作得很好,这就是我想告诉你的。它只是在编译之前标记一个错误。编译后显然不存在该错误,因为扩展方法编译并运行得很好。问题是我想清理列出的错误,而不是我的项目需要工作。 他们在同一个项目中吗?您是否可能必须设置解决方案的构建顺序以确保首先构建适当的项目。这只是一个建议,只是想提供一些帮助。【参考方案2】:

您需要导入放置扩展程序的命名空间。而且由于这个问题在运行时出现之前有点烦人,您可以启用view compilation 让编译器检测到问题。不过,我应该警告您,编译视图是一项耗时的操作。

【讨论】:

如果您阅读了我的问题,我会说我确实导入了我放置扩展的命名空间。事实上,我什至展示了我这样做的代码。如果我没有导入放置扩展的命名空间,项目将不会运行,正如我所说的那样。但该项目确实运行。它完美地工作。唯一的问题是在编译之前被标记的烦人的错误。

以上是关于MVC2 扩展方法在我的视图中引发错误的主要内容,如果未能解决你的问题,请参考以下文章

是否可以编写返回文本视图 HStack 的 func、方法、结构、扩展、类?

无法在局部视图中使用扩展方法

使用 @Security 时引发的异常为 RuntimeException

无法从派生类型列表访问扩展方法

在构建期间检查剃刀错误

Express Js EJS 布局错误:未指定默认引擎且未提供扩展名