1

我无法弄清楚以下代码中缺少什么。我有一个方法应该添加一个(虚拟)助手扩展:

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'.

我究竟做错了什么?

4

5 回答 5

1

不知道为什么 Import Namespace 指令没有起到作用,但我补充说

<add namespace="MyProject.HtmlHelpers"/>

<namespaces>web.config 部分,它现在正在工作。也许如果我做了

<%@ Import Namespace="MyProject.HtmlHelpers" %>

它也会起作用吗?

于 2009-07-21T12:26:25.143 回答
0

在尝试使用扩展方法之前,您是否尝试过重建解决方案?为了让编译器能够识别我的扩展方法的存在,我不得不用 VB.NET 来做这件事。

于 2009-07-20T23:09:13.717 回答
0

我想我刚刚找到了解决方案。

您的助手模块需要位于App_Code目录中。

于 2011-02-20T09:31:10.900 回答
0

正如 gfrizzle 所说,将名称空间引用添加到 Views 文件夹中的 web.config 可以使页面正确显示。但是,我必须重新启动客户端才能让 Intellisense 正常工作。我还必须Import为已全局导入到带有扩展模块的文件的命名空间显式添加语句。

例如,扩展时System.Web.Mvc.HtmlHelper我必须添加该行

Imports System.Web.Mvc

尽管应用程序编译正确并且在项目引用选项卡上检查了命名空间,但为了使页面正确显示。

于 2014-01-25T06:56:08.800 回答
-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# 编写代码,你不会有任何问题

马可

于 2011-11-22T14:26:46.393 回答