Я не могу понять, что мне не хватает в следующем коде. У меня есть метод, который должен добавить (фиктивное) вспомогательное расширение:

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

Что я делаю не так?

1
gfrizzle 18 Июн 2009 в 19:58

5 ответов

Лучший ответ

Не уверен, почему директива Import Namespace не сработала, но я добавил

<add namespace="MyProject.HtmlHelpers"/>

В раздел <namespaces> файла web.config, и теперь он работает. Может, если бы я сделал

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

Это сработало бы также?

1
gfrizzle 21 Июл 2009 в 12:26

Вы пытались перестроить свое решение, прежде чем пытаться использовать метод расширения? Мне пришлось сделать это с VB.NET, чтобы компилятор уловил существование моих методов расширения.

0
CoderDennis 20 Июл 2009 в 23:09

Думаю, я только что нашел решение.

Модули вашего помощника ДОЛЖНЫ БЫТЬ в каталоге App_Code .

0
newbeee 20 Фев 2011 в 09:31

Как сказал gfrizzle, добавление ссылки на пространство имен в web.config в папке Views позволяет странице правильно отображаться. Однако мне пришлось перезапустить клиент, чтобы Intellisense заработал правильно. Мне также пришлось явно добавить операторы Import для пространств имен, которые уже были глобально импортированы в файл с модулем расширения.

Например, при расширении System.Web.Mvc.HtmlHelper мне пришлось добавить строку

Imports System.Web.Mvc

Чтобы страница отображалась без ошибок, несмотря на то, что приложение компилируется правильно и пространство имен проверяется на вкладке ссылок проекта.

0
Flangus 25 Янв 2014 в 06:56

Проблема может заключаться в том, что вы установили и MVC2, и MVC3. Если да, то при написании HTMLHelper Custom с VB.NET Visual Studio выдает ошибку объявления «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 #, и у вас не будет никаких проблем

Marco

-2
user575380 22 Ноя 2011 в 14:26