Невозможно создать методы 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