In _Layout.cshtml
ist es möglich zu bestimmen, was View in @RenderBody()
gerendert wird?Ermitteln, welche Ansicht in @RenderBody gerendert wird()
Antwort
Sie können die Ansicht (dh Index.cshtml) erhalten durch ((RazorView)ViewContext.View).ViewPath
Beispiel für Ihre Bedürfnisse:
<script type="text/javascript" src="~/Content/Scripts/@(Path.GetFileNameWithoutExtension(Server.MapPath(((RazorView)ViewContext.View).ViewPath))).js"></script>
Wenn Sie Ihre aktuelle Ansicht benötigen (dh _Layout.cshtml), Sie können stattdessen VirtualPath
verwenden.
Alte Antwort Ihre Kommentare lesen, möchten Sie ein
<script ...>...</script>
je nach Ansicht hinzufügen, aber außerhalb von @RenderBody()
?
setzen Dann
@RenderSection("Scripts", required:false)
und in der Ansicht definieren den Abschnitt wie
@section Scripts {
<script ...>...</script>
}
Sie müssen also nicht Ihre _Layout.cshtml zu halten, da jede Ansicht ihre eigenen Skripts definiert. Hier
ist eine einfache Erklärung: http://weblogs.asp.net/scottgu/asp-net-mvc-3-layouts-and-sections-with-razor
Ich weiß, dass ich das tun kann, aber es ist nicht das, was ich will .... Ich experimentiere nur, wie man index.js in die Ansicht index.cshtml (und detail.js in details.cshtml usw.) einfügt.) ohne manuelle Eingabe. meine Idee war, ein Stück Code in _layout.cshtml zu platzieren, das die Arbeit für mich tun wird ... und dafür muss ich die Ansicht kennen. – gsharp
Ich habe gerade meine Antwort bearbeitet. Also, was willst du erreichen? – Matt
Ich lese @Matt editierte Antwort und denke, das ist der einfachste Weg. –
Was Sie können tun, ist Html.ViewContext.RouteData.Values
überprüfen. Das ist ein Wörterbuch mit Controller, Aktion und ID (falls nötig).
Danke für Ihre Antwort. Leider muss ich die Ansicht und nicht die Aktion kennen. – gsharp
lesen this Artikel und es wird Ihr Problem zu lösen.
bearbeiten
Render
Was ist Render?
In Layoutseiten rendert der Teil einer Inhaltsseite, die nicht innerhalb eines benannten Abschnitts ist. [MSDN]
Wie funktioniert RenderBody (grafische Darstellung)?
RenderBody() hat keine überladene Methode, also kannst du offensichtlich nicht die Ansicht definieren, die du rendern willst. – Moh
The @RenderBody()
macht die durch die Steuerung gesteuert Ansicht. also wenn dein Controller so ist.
public class HomeController : Controller
{
public ActionResult Index() // Renders File /Views/Home/Index.cshtml
{
return View();
}
}
Dann wird der public ActionResult Index()
Index.cshtml wird die Ansicht, es int/Ansichten/Start-Ordner rendert.
Sie können zum Index hinzufügen.cshtml oder _Layout.cshtml Blick auf andere Ansichten oder partialViews zu machen Durch das Hinzufügen @Html.Partial("_MyView")
wie unten dargestellt.
@Html.Partial("_LayoutHeaderHeader")
@Html.Partial("_LayoutHeaderNavbar")
Manchmal ist es einfach, ein paar Layoutseiten einzurichten, die aus verschiedenen Ansichten aufgerufen werden.
Wenn Sie Skripte für Sie aufrufen möchten, sollten Sie immer eine _PartialView erstellen und Ihre Skripte in der Teilansicht platzieren und diese Ansicht am unteren Rand Ihrer Ansicht wie diese aufrufen @Html.Partial("_MyView")
und die Skripte werden richtig gesetzt.
Hier ist ein gutes Tutorial. http://www.codeproject.com/Articles/698246/ASP-NET-MVC-Special-Views-Partial-View-and-Layout
Hallo Reich. Das funktioniert nicht, weil Sie View ("AnotherViewThatDoesntMatchTheActionName") zurückgeben können – gsharp
Ich entschuldige mich, wenn ich die Frage gelesen habe, nahm ich an, dass Sie nach Details suchten, um zu wissen, welche Ansicht standardmäßig gerendert wird. –
Wenn Sie alle Ihre Modelle von einem Basismodell ableiten, dann könnten Sie eine Eigenschaft Ihnen Basismodell hinzufügen, die den Namen der Steuerung zurückgibt, die Sie
mit bekommen könnenthis.RouteData.Values["controller"].ToString();
Es wäre noch besser, Wenn Sie eine BaseController
Klasse hätten, könnten Sie diese in den Konstruktor einfügen und müssen sie nie wieder anfassen.
Da Sie einen Nachkomme des Basismodells an Ihre Indexseite zurückgeben würden, die den Namen des Controllers hat, könnten Sie nun eine Schemabasis unter @Model.ControllerName
verwenden. Wenn Ihr Controller mehrere Ansichten bedient, könnte die Eigenschaft aktualisiert werden, um einen bestimmten Ansichtsnamen anzugeben.
Ich glaube nicht, dass Sie den Namen eines Partials innerhalb des Index erhalten können, wenn Sie jquery verwenden und zu diesem Zeitpunkt die Seitenressourcen bereits geladen wurden.
Bearbeiten: Ein weiterer Trick wäre, Ihre eigene Version der @ Html.Partial() HtmlHelper-Klasse zu erstellen. So haben Sie @ Html.MyPartial ("ViewName") und innerhalb dieser Methode rufen Sie die interne Funktion, die generiert Html.Partial und dann injizieren Sie Ihre Abhängigkeiten.
Ein weiterer Trick mit der HtmlHelper-Klasse wurde hinzugefügt. –
EDIT: Ich habe gerade Ihre Kommentare zu dem Thema gelesen und denke, dass der bessere Weg ist, den Code Snipplet von @Matt in einer anderen Antwort zur Verfügung gestellt.
Sie können die Anweisung @section in Ihrer Ansicht verwenden, um zu informieren, welches Skript geladen werden soll.
Layout-Vorlage Platzhalter
@RenderSection("scripts", required: false)
Code anzeigen
@section scripts {
<script src="~/Scripts/custom-imgedit.js"></script>
}
Das obige Beispiel informieren, dass der benutzerdefinierten-imgedit.js wird im Abschnitt Platzhalter macht geladen werden. Hinweis: Sie können sogar Pakete wie @Scripts.Render ("~/bundles/myCustomScripts") verwenden.
- 1. Backbone.js: Keine Ansicht gerendert
- 2. Ermitteln, welche ChartArea doppelt geklickt wird
- 3. @RenderBody() mit Leinwand
- 4. Ermitteln, welche ASP.NET MVC View zurückgegeben wird, wenn keine Rückkehr verwendet wird Ansicht (Modell), aber zurück Ansicht ("viewName", Modell)
- 5. @RenderBody ändern, um auf eine andere Ansicht zu zeigen MVC3
- 6. Wie wird festgelegt, welche Ansicht in einem UIStackView erweitert wird?
- 7. Wie überprüft man, ob eine Backbone-Ansicht gerendert wird?
- 8. Evaluieren der Titel in der Ansicht (gerendert)
- 9. Ereignis, wenn die Ansicht auf NativeScript gerendert wird
- 10. Ermitteln, welche Kopie Konstruktoren in C++ Code aufgerufen wird
- 11. Ermitteln, welche Ansicht gerade berührt wird, während der Benutzer Finger bewegt
- 12. Sonderzeichen in UTF-8 mit RenderBody()
- 13. UIWebView wird nicht korrekt gerendert
- 14. Teilweise wird nicht gerendert
- 15. React.js wird nicht gerendert?
- 16. Komponente wird nicht gerendert
- 17. Objekt wird nicht gerendert
- 18. Ermitteln, welche App derzeit unter iOS mit sysctl ausgeführt wird
- 19. Ermitteln, welche Version von OpenCV
- 20. Ermitteln, welche Freigabeerweiterung verwendet wurde
- 21. Angular - URL wird auf state.go aktualisiert, aber die Ansicht wird nicht gerendert
- 22. AndroidStudio-Layout wird nicht gerendert
- 23. Wie DataGridView korrekt gerendert wird?
- 24. mit mvc.net gibt es ein Ereignis, das ausgelöst wird, nachdem die Ansicht gerendert wird
- 25. Seite wird nicht immer gerendert
- 26. View wird nicht gerendert backbonejs
- 27. Farbfeld Bild wird nicht gerendert
- 28. Komponente wird nicht ordnungsgemäß gerendert
- 29. Composite-Ansicht kann in Eclipse im Bearbeitungsmodus nicht gerendert werden
- 30. Blender-Modell wird falsch in libGDX gerendert
Was genau brauchen Sie? Es ist nicht ganz klar, was du meinst. –
Möchten Sie verschiedene Ansichten basierend auf bestimmten Bedingungen rendern? –
@AndreiV sagen wir, dass/Home/MyView Ich möchte "MyView" innerhalb _Layout.cshtml bekommen – gsharp