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

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

我做错了什么?

有帮助吗?

解决方案

不确定为什么导入命名空间指令没有做到这一点,但我添加了

<add namespace="MyProject.HtmlHelpers"/>

到web.config的<namespaces>部分,它现在正在运行。也许如果我做了

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

它会起作用吗?

其他提示

在尝试使用扩展方法之前,您是否尝试过重建解决方案?我必须用VB.NET来做这件事,以便编译器能够找到扩展方法的存在。

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

您的帮助程序模块需要位于 App_Code 目录中。

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

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

Imports System.Web.Mvc

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

问题可能是你已经安装了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#编写代码,你就不会有任何问题

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top