Невозможно создать методы HtmlHelper в приложении VB MVC

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

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

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

<add namespace="MyProject.HtmlHelpers"/>

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

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

это тоже сработало бы?

Ответ 2

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

Ответ 3

Думаю, я нашел решение.

Ваши вспомогательные модули НУЖНО БЫТЬ в каталоге App_Code.

Ответ 4

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

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

Imports System.Web.Mvc

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

Ответ 5

Проблема может заключаться в том, что вы установили MVC2 и MVC3. Если это так, когда вы пишете HTMLHelper Custom с VB.NET Visual Studio throw ad Ошибка "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) Запишите код на С#, и у вас не будет проблем.

Marco