web-dev-qa-db-ger.com

Wie füge ich den Razor-Seiten zusätzliche Namespaces hinzu, anstatt eine @ use-Deklaration zu verwenden?

Gibt es eine Art Magie, die ich verwenden muss, um die Namespaces im pages/namespaces-Element der webconfig abzurufen?

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

Das oben genannte nicht möchte funktionieren. Ich weiß, dass der Namespace in Ordnung ist, denn wenn ich den @using MyCustomHelpers oben auf der Seite platziere, funktioniert er magisch.

Dies ist so, dass ich die Html.SomeFunction() zum Laufen bringen kann, ohne @using oben auf allen meinen Seiten einfügen zu müssen

144
MyNameIsJob

Update: Bitte sehen Sie sich meine aktualisierte Antwort an, die für MVC 3 RC gilt: Razor HtmlHelper-Erweiterungen (oder andere Namensräume für Ansichten) Nicht gefunden

Dies hat sich zwischen MVC 3 Preview 1 und MVC 3 Beta (heute veröffentlicht) geändert. In der Vorschau 1 verwendete Razor den Konfigurationsbereich für WebForms-Namespaces. In der Betaversion gibt es jedoch einen neuen Konfigurationsabschnitt, der sich von WebForms unterscheidet. Sie müssen der web.config-Datei folgendes hinzufügen (oder einfach mit einem brandneuen Projekt aus der Vorlage beginnen):

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

Hinweis, dass Sie die Datei möglicherweise schließen und erneut öffnen müssen, damit die Änderungen vom Editor übernommen werden.

Beachten Sie, dass weitere Änderungen an den in web.config erforderlichen Änderungen vorgenommen wurden, damit Razor in MVC3 Beta funktioniert. Sie sollten sich also am besten die ~\View\Web.config-Datei ansehen, die in den Beta-Projektvorlagen enthalten ist.

161
marcind

Wenn Sie Ihre Namespace-Deklaration in den Web.config im Stammordner "Views" und/oder im aktuellen "Views" -Ordner des Bereichs (abhängig davon, wo sich Ihre Ansicht befindet) ablegen, sollte dies wie erwartet funktionieren.

50
Buildstarted

Ich habe diese http://weblogs.asp.net/mikaelsoderstrom/archive/2010/07/30/add-namespaces-with-razor.aspx gefunden, die erläutert, wie Sie allen Rasiererseiten einen benutzerdefinierten Namensraum hinzufügen.

Grundsätzlich kannst du das machen

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

und fügen Sie den folgenden Code in Ihre AssemblyInfo.cs ein

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

die Methode InitializeApplication wird vor Application_Start in global.asax ausgeführt

6
k-dev

Eine weitere Technik besteht darin, Ihre Helfer-Erweiterungsklasse einfach in einen System-Namespace zu stellen, der standardmäßig bereits in der View-Engine enthalten ist. Zum Beispiel:

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

Solange auf die Bibliothek, die die Klasse enthält, referenziert wird, wird alles auf diese Weise angezeigt. Da Sie eine System.Web.Mvc-Klasse erweitern, scheint es akzeptabel zu sein, die Erweiterungsmethoden in demselben Namespace abzulegen.

4
Peter

Versuchen Sie, die Ansicht zu schließen und erneut zu öffnen, nachdem Sie sichergestellt haben, dass die Änderungen an der web.config im Stammverzeichnis der Ansicht vorgenommen wurden. 

Das Schließen und Wiedereröffnen hat mein Problem behoben.

Siehe hier:

ASP.NET MVC 4-Namespace-Problem in der Rasiermesseransicht

0
eaglei22