我无法弄清楚以下代码中缺少的内容。我有一个应该添加(虚拟)辅助扩展的方法:
Imports System.Runtime.CompilerServices
Namespace HtmlHelpers
Public Module HelpExtensions
<Extension()> _
Public Function HelpMe(ByVal HtmlHelper As HtmlHelper) As String
Return "<a>HELP</a>"
End Function
End Module
End Namespace
我的观点如下:
<%@ Page Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<%@ Import Namespace="HtmlHelpers" %>
<asp:Content ID="indexContent" ContentPlaceHolderID="body" runat="server">
<%=Html.HelpMe()%>
</asp:Content>
但是这给了我以下错误:
'HelpMe' is not a member of 'System.Web.Mvc.HtmlHelper'.
我做错了什么?
答案 0 :(得分:1)
不确定为什么导入命名空间指令没有做到这一点,但我添加了
<add namespace="MyProject.HtmlHelpers"/>
到web.config的<namespaces>
部分,它现在正在运行。也许如果我做了
<%@ Import Namespace="MyProject.HtmlHelpers" %>
它会起作用吗?
答案 1 :(得分:0)
在尝试使用扩展方法之前,您是否尝试过重建解决方案?我必须用VB.NET来做这件事,以便编译器能够找到扩展方法的存在。
答案 2 :(得分:0)
我想我刚刚找到了解决方案。
您的帮助程序模块需要位于 App_Code 目录中。
答案 3 :(得分:0)
正如gfrizzle所说,在Views文件夹中添加名称空间引用到web.config允许页面正确显示。但是,我不得不重新启动客户端以使Intellisense正常工作。我还必须为已经使用扩展模块全局导入到文件的名称空间显式添加Import
语句。
例如,在扩展System.Web.Mvc.HtmlHelper
时,我必须添加行
Imports System.Web.Mvc
为了使页面无错误地显示,尽管应用程序正确编译并在项目引用选项卡上检查了命名空间。
答案 4 :(得分:-2)
问题可能是你已经安装了MVC2和MVC3。 如果是这样,当您使用VB.NET Visual Studio编写HTMLHelper Custom时抛出广告错误“YourClass”不是“System.Web.Mvc.HtmlHelper”的成员。
但是如果你运行页面就可以了。
这是解决方案: http://forums.asp.net/t/1694828.aspx/1
解决方案1)将项目升级到MVC3 解决方案2)卸载MVC3 解决方案3)将.NET框架更改为3.5而不是4.0(禁用MVC3) 解决方案4)用C#编写代码,你就不会有任何问题
马