2011-11-21 73 views
0

我有一个用MVC2和VB.NET编写的项目。我使用了很多htmlhelper扩展方法,并且我将它们全部放在公共模块中。他们工作得很好,我可以编译和运行我的项目。我引用它们与这个命名空间:MVC2扩展方法在我的视图中抛出错误

​​

所以,再一次,他们的工作很好,我的项目运行和顺利编译。

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

Error 33 'TabbedMenu' is not a member of 'System.Web.Mvc.HtmlHelper(Of Object)'. C:\Projects\MyProject\MyProject.WebUI\Views\Shared\Site.Master 23 21 MyProject.WebUI

这并不阻止编译和运行项目,它只是创建了一个错误,这是烦人。我尝试过寻找解决方案,但是我发现的所有解决方案都是针对不编译的项目,所有这些解决方案都使用简单的解决方案,如引用正确的名称空间或确保将模块声明为公共。有什么想法吗?

回答

0

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

如果您还没有,请检查一下,这可能与您之后的状况有关。

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

+0

首先,如果我没有导入命名空间,那么项目就不会像我说的那样运行(参见上面的注释)。其次,这是在VB.NET中。扩展方法必须位于自动定义共享方法的模块中。 再一次,网站的工作原理和扩展方法一样。他们只是在编译之前抛出错误......尽管他们最终编译了。 – user961794

+0

也许如果你发布了Extensions类的例子和一种不能深入了解潜在问题的方法?从你所说的话来看,它似乎应该起作用。 – dreza

+0

它正在工作,完美,这就是我想告诉你的。它只是在编译之前标记错误。编译后,这个错误显然不存在,因为扩展方法编译并运行得很好。问题是我想清理列出的错误,而不是我需要我的项目工作。 – user961794

0

你需要导入你放置你的扩展的命名空间。而且由于这个问题早在运行时就显示出来,所以你可以启用view compilation让编译器检测到问题。不过,我应该警告你编译视图是一项耗时的操作。

+0

如果你阅读我的问题,我说我确实导入了我放置扩展名的命名空间。实际上,我甚至展示了我在其中执行的代码。 如果我没有导入放置扩展名的命名空间,那么项目就不会运行,就像我说的那样。但该项目确实运行。它完美的作品。唯一的问题是在编译之前得到标记的恼人的错误。 – user961794