Как добавить дополнительные пространства имен в страницы Razor вместо @using объявления?
Есть ли какая-то магия, которую мне нужно использовать для получения пространств имен в элементе pages/namespaces
в webconfig?
<pages>
<namespaces>
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Ajax"/>
<add namespace="System.Web.Mvc.Html"/>
<add namespace="System.Web.Routing"/>
<add namespace="System.Web.WebPages"/>
<add namespace="System.Web.Helpers"/>
<add namespace="MyCustomHelpers"/>
</namespaces>
</pages>
Вышеизложенное просто не хочет работать. Я знаю, что пространство имен прекрасно, потому что, когда я помещаю @using MyCustomHelpers
в начало страницы, он волшебным образом работает.
Это так, что я могу заставить Html.SomeFunction()
работать без необходимости ставить @using
вверху всех моих страниц
Ответы
Ответ 1
Обновить. Пожалуйста, взгляните на мой обновленный ответ, который относится к MVC 3 RC: Razor HtmlHelper Extensions (или другие пространства имен для просмотров) Не найдено
Это изменилось между MVC 3 Preview 1 и MVC 3 Beta (выпущено только сегодня). В Preview 1 Razor используется раздел конфигурации пространств имен WebForms. Однако в бета-версии есть новый раздел конфигурации, который отделен от WebForms. Вам нужно будет добавить follwing в файл web.config(или просто начать с нового проекта из шаблона):
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="MyCustomHelpers" />
</namespaces>
</pages>
</system.web.webPages.razor>
Примечание, что вам может понадобиться закрыть и снова открыть файл для изменений, которые будут выбраны редактором.
Обратите внимание, что есть другие изменения в том, что требуется в web.config, чтобы заставить Razor работать в бета-версии MVC3, поэтому вам было бы лучше взглянуть на файл ~\View\Web.config
, который поставляется в шаблонах проектов бета-версии.
Ответ 2
Если вы разместите свое объявление пространства имен в Web.config
в корневой папке "Виды" и/или в текущей папке "Виды" (в зависимости от того, где находится ваше представление) - она должна работать как ожидалось.
Ответ 3
Я нашел этот http://weblogs.asp.net/mikaelsoderstrom/archive/2010/07/30/add-namespaces-with-razor.aspx, в котором объясняется, как добавить собственное пространство имен ко всем страницам бритвы.
В принципе вы можете сделать это
using Microsoft.WebPages.Compilation;
public class PreApplicationStart
{
public static void InitializeApplication()
{
CodeGeneratorSettings.AddGlobalImport("Custom.Namespace");
}
}
и поместите следующий код в свой AssemblyInfo.cs
[assembly: PreApplicationStartMethod(typeof(PreApplicationStart), "InitializeApplication")]
метод InitializeApplication будет выполнен до Application_Start в global.asax
Ответ 4
Для чего стоит другой метод - просто поместить ваш класс вспомогательных расширений в пространство имен System, которое по умолчанию уже включено механизмом просмотра. Например:
namespace System.Web.Mvc
{
public static class HtmlHelper_MyExtensions
{
...
}
}
Таким образом, пока ссылка на библиотеку, содержащую класс, будет видна. Поскольку вы расширяете класс System.Web.Mvc
, представляется разумно приемлемым использовать методы расширения в одном и том же пространстве имен.
Ответ 5
Попробуйте закрыть и снова открыть представление, убедившись, что изменения были внесены в web.config в корневом представлении.
Закрытие и повторное открытие зафиксировали мою проблему.
Смотрите здесь:
Проблема с пространством имен ASP.NET MVC 4 в режиме бритвы