Was ist der beste Ort (welcher Ordner usw.), um ansichtsspezifische Javascript-Dateien in einer ASP.NET MVC-Anwendung abzulegen?
Um mein Projekt organisiert zu halten, würde ich sie gerne neben die ASPX-Dateien der Ansicht stellen, aber ich habe keine gute Möglichkeit gefunden, sie zu referenzieren, ohne die ~ / Views anzuzeigen / Aktion / Ordnerstruktur. Ist es wirklich eine schlechte Sache, Details dieser Ordnerstruktur auslaufen zu lassen?
Die Alternative besteht darin, sie in den Ordnern ~ / Scripts oder ~ / Content abzulegen, ist aber eine kleine Irritation, da ich mich jetzt um Dateinamenkonflikte kümmern muss. Es ist jedoch eine Irritation, die ich überwinden kann, wenn es "das Richtige" ist.
asp.net-mvc
Erv Walter
quelle
quelle
Antworten:
Alte Frage, aber ich wollte meine Antwort geben, falls jemand anderes danach sucht.
Ich wollte auch meine ansichtsspezifischen js / css-Dateien unter dem Ordner views anzeigen, und so habe ich es gemacht:
Im Ordner web.config im Stammverzeichnis von / Views müssen Sie zwei Abschnitte ändern, damit der Webserver die Dateien bereitstellen kann:
Anschließend können Sie in Ihrer Ansichtsdatei auf die erwarteten URLs verweisen:
Dies ermöglicht das Bereitstellen von .js- und .css-Dateien und verbietet das Bereitstellen von anderen Daten.
quelle
Eine Möglichkeit, dies zu erreichen, besteht darin, Ihre eigenen zu liefern
ActionInvoker
. Mit dem unten enthaltenen Code können Sie dem Konstruktor Ihres Controllers Folgendes hinzufügen:Wann immer Sie eine
.js
Datei neben Ihrer Ansicht platzieren:Sie können direkt darauf zugreifen:
Unten ist die Quelle:
quelle
Sie können den Vorschlag von davesw umkehren und nur .cshtml blockieren
quelle
Site.Master
. Whitelisting scheint der sicherere Ansatz zu seinIch weiß, dass dies ein ziemlich altes Thema ist, aber ich möchte ein paar Dinge hinzufügen. Ich habe die Antwort von davesw ausprobiert, aber beim Laden der Skriptdateien wurde ein Fehler von 500 ausgegeben. Daher musste ich diesen zur Datei web.config hinzufügen:
zu system.webServer. Folgendes habe ich und konnte es zum Laufen bringen:
Weitere Informationen zur Validierung finden Sie hier: https://www.iis.net/configreference/system.webserver/validation
quelle
Fügen Sie diesen Code in die Datei web.config im Tag system.web ein
quelle
Ich wollte auch js-Dateien, die sich auf eine Ansicht beziehen, im selben Ordner wie die Ansicht ablegen.
Ich konnte die anderen Lösungen in diesem Thread nicht zum Laufen bringen, nicht dass sie kaputt sind, aber ich bin zu neu in MVC, um sie zum Laufen zu bringen.
Unter Verwendung der hier gegebenen Informationen und mehrerer anderer Stapel habe ich eine Lösung gefunden, die:
Hinweis: Ich verwende auch HTTP-Attribut-Routing. Es ist möglich, dass die in meiner Lösung verwendete Route so geändert wird, dass sie funktioniert, ohne dies zu aktivieren.
Angesichts des folgenden Beispiels Verzeichnis / Dateistruktur:
Unter Verwendung der unten angegebenen Konfigurationsschritte in Kombination mit der obigen Beispielstruktur würde auf die URL
/Example/Test
der Testansicht zugegriffen über: und auf die Javascript-Datei würde verwiesen über:/Example/Scripts/test.js
Schritt 1 - Attribut-Routing aktivieren:
Bearbeiten Sie Ihre Datei /App_start/RouteConfig.vb und fügen Sie sie
routes.MapMvcAttributeRoutes()
direkt über den vorhandenen Routen hinzu. MapRoute:Schritt 2 - Konfigurieren Sie Ihre Site so, dass /{controller}/Scripts/*.js als MVC-Pfad und nicht als statische Ressource behandelt und verarbeitet wird
Bearbeiten Sie Ihre Datei /Web.config und fügen Sie dem Abschnitt system.webServer -> Handler der Datei Folgendes hinzu:
Hier ist es wieder mit Kontext:
Schritt 3 - Fügen Sie Ihrer Controller-Datei das folgende Ergebnis der Skriptaktion hinzu
Sie müssen dies in jede Ihrer Controller-Dateien kopieren. Wenn Sie möchten, gibt es wahrscheinlich eine Möglichkeit, dies als einzelne, einmalige Routenkonfiguration zu tun.
Für den Kontext ist dies meine ExampleController.vb-Datei:
Schlussbemerkungen Die Javascript-Dateien von test.vbhtml view / test.js enthalten nichts Besonderes und werden hier nicht angezeigt.
Ich behalte mein CSS in der Ansichtsdatei, aber Sie können diese Lösung problemlos ergänzen, damit Sie auf ähnliche Weise auf Ihre CSS-Dateien verweisen können.
quelle