web-dev-qa-db-fra.com

Comment ajouter des espaces de noms supplémentaires aux pages Razor au lieu de la déclaration @using?

Dois-je utiliser une sorte de magie pour obtenir les espaces de noms dans l'élément pages/namespaces de la configuration Web?

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

Ce qui précède ne fait que non vouloir travailler. Je sais que l’espace de nommage convient, car lorsque je mets le @using MyCustomHelpers en haut de la page, il fonctionne comme par magie.

C’est pour que je puisse faire fonctionner la Html.SomeFunction() sans avoir à mettre @using en haut de toutes mes pages.

144
MyNameIsJob

Mise à jour: veuillez consulter ma réponse mise à jour qui s'applique à MVC 3 RC: Extensions de Razor HtmlHelper (ou d'autres espaces de noms pour les vues) Introuvable

Cela a changé entre MVC 3 Preview 1 et MVC 3 Beta (publié aujourd'hui). Dans Preview 1, Razor utilisait la section de configuration des espaces de noms WebForms. Cependant, dans la bêta, il y a une nouvelle section de configuration qui est séparée de celle de WebForms. Vous devrez ajouter ce qui suit à votre fichier web.config (ou simplement commencer avec un tout nouveau projet à partir du modèle):

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

Notez que vous devrez peut-être fermer et rouvrir le fichier pour que les modifications soient prises en compte par l'éditeur.

Notez que d'autres modifications ont été apportées à ce qui est requis dans web.config pour que Razor fonctionne dans la version bêta de MVC3. Vous feriez donc mieux de consulter le fichier ~\View\Web.config fourni avec les modèles de projet Bêta.

161
marcind

Si vous placez votre déclaration d'espace de noms dans le Web.config dans le dossier racine "Views" et/ou le dossier "Views" de la zone actuelle (selon l'emplacement de votre vue), cela devrait fonctionner normalement.

50
Buildstarted

J'ai trouvé ceci http://weblogs.asp.net/mikaelsoderstrom/archive/2010/07/30/add-namespaces-with-razor.aspx qui explique comment ajouter un espace de nom personnalisé à toutes vos pages de rasoir.

Fondamentalement, vous pouvez faire cela

using Microsoft.WebPages.Compilation;
public class PreApplicationStart
{
   public static void InitializeApplication()
   {
       CodeGeneratorSettings.AddGlobalImport("Custom.Namespace");
   }
}

et mettez le code suivant dans votre AssemblyInfo.cs

[Assembly: PreApplicationStartMethod(typeof(PreApplicationStart), "InitializeApplication")]

la méthode InitializeApplication sera exécutée avant Application_Start dans global.asax

6
k-dev

Pour ce qui en vaut la peine, une autre technique consiste simplement à placer votre classe d'extension d'assistance dans un espace de noms System déjà inclus par défaut par le moteur de vue. Par exemple:

namespace System.Web.Mvc
{
    public static class HtmlHelper_MyExtensions
    {
        ...
    }
}

Ainsi, tant que la bibliothèque contenant la classe est référencée, tout le verra. Comme vous étendez une classe System.Web.Mvc, il semble raisonnablement acceptable de placer les méthodes d'extension dans le même espace de noms.

4
Peter

Essayez de fermer et de rouvrir la vue après vous être assuré que les modifications avaient été apportées à web.config à la racine de la vue. 

La fermeture et la réouverture ont résolu mon problème.

Vois ici:

Problème d'espace de noms ASP.NET MVC 4 en vue rasoir

0
eaglei22