Вопрос

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

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

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

Это было полезно?

Решение

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

<add namespace="MyProject.HtmlHelpers"/>

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

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

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

Другие советы

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

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

Модули вашего помощника должны находиться в каталоге код_приложения .

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

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

Imports System.Web.Mvc

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

Проблема может заключаться в том, что вы установили как MVC2, так и MVC3.Если это так, то при написании пользовательского интерфейса HtmlHelper с помощью VB.NET Visual Studio выдает ошибку ad "YourClass" не является членом 'System.Web.Mvc.HtmlHelper'.

Но если вы запустите страницу, она будет работать нормально.

Это и есть решение:http://forums.asp.net/t/1694828.aspx/1

Решение 1) Обновите свой проект до MVC3 Решение 2) Удалите MVC3 Решение 3) Измените .NET Framework на 3.5 вместо 4.0 (отключите MVC3) Решение 4) Напишите код на C #, и у вас не возникнет никаких проблем

Марко

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top