Wie kommt es, wenn ich Layout = null;
in meiner Ansicht habe - es zieht immer noch das Standardlayout?!
Gibt es einen Trick, um das zu verhindern?
Hier ist meine Ansicht ohne Layout:
@{
Layout = "";
}
<!DOCTYPE html>
<html>
<head>
<title>Index</title>
@{Html.RenderAction("Head", "Header");}
</head>
<body>
<div>
Home
</div>
</body>
</html>
Hier ist die gerenderte Ausgabe !!
<!DOCTYPE html>
<html>
<head>
<title>Index</title>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<link href="/Content/Site.css" rel="stylesheet" type="text/css" />
<script src="/Scripts/jquery-1.5.1.min.js" type="text/javascript"></script>
<script src="/Scripts/modernizr-1.7.min.js" type="text/javascript"></script>
</head>
<body>
header
</body>
</html>
</head>
<body>
<div>
Home
</div>
</body>
</html>
asp.net-mvc
asp.net-mvc-3
layout
razor
Greg B.
quelle
quelle
null
auf der gerenderten Seite?Antworten:
Haben Sie eine
_ViewStart.cshtml
in diesem Verzeichnis? Ich hatte das gleiche Problem, das Sie hatten, als ich versuchte, _ViewStart zu verwenden. Dann habe ich es in _mydefaultview umbenannt, in dasViews/Shared
Verzeichnis verschoben und zu "Keine Ansicht in cshtml-Dateien angeben, in denen ich es nicht möchte" und für den Rest _mydefaultview angegeben. Ich weiß nicht, warum das notwendig war, aber es hat funktioniert.quelle
_ViewStart
sollte vor dem Code in der Ansicht ausgeführt werden, damit dieses Problem nicht auftritt. Haben Sie etwas Ungewöhnliches in Ihrem _ViewStart?_ViewStart
. Siehe meine Antwort.Ich denke das :
@{ Layout = ""; }
ist nicht dasselbe wie das:
@{ Layout = null; }
Ich benutze die zweite und es funktioniert, kein _Viewstart enthalten.
quelle
Sie (und KMulligan) verstehen
_ViewStart
Seiten falsch ._ViewStart
wird immer ausgeführt, bevor Ihre Seite startet.Es soll zum Initialisieren von Eigenschaften (z. B.
Layout
) verwendet werden. Es sollte im Allgemeinen kein Markup enthalten. (Da es keine Möglichkeit gibt, es zu überschreiben).Das richtige Muster besteht darin, eine separate Layoutseite zu erstellen, die aufruft
RenderBody
, und dieLayout
Eigenschaft so festzulegen, dass sie auf diese Seite in verweist_ViewStart
.Sie können dann
Layout
Ihre Inhaltsseiten ändern , und die Änderungen werden wirksam.quelle
_Layout.cshtml
enthält alle grundlegenden Designs. und_ViewStart.cshtml
ruft die_Layout.cshtml
. Jedes Modul meiner App hat eine eigene Layoutseite, aber dieses Layout verwendet die Hauptseite_Layout.cshtml
. Da die MVC-App vom Viewstart aus startet, war meine einzige Lösung wohl, alles in Viewstart zu kommentieren. und das verursacht keine zusätzlichen Probleme, da andere Seiten bereits verwendet wurden_Layout.cshtml
. ziemlich einfach.Ich denke, es ist besser, mit individuellen "Ansichten" zu arbeiten. Ich versuche, von PHP zu MVC4 zu wechseln. Es ist wirklich schwierig, aber ich bin auf dem richtigen Weg ...
Wenn Sie Ihre Frage beantworten und einzelne Seiten bearbeiten, bearbeiten Sie einfach die Datei _ViewStart.cshtml
@{ Layout = null; }
Ein weiterer Tipp, wenn Sie Probleme mit dem CSS-Pfad haben ...
Setzen Sie "../" vor die URL
Dies sind die 2 Probleme, die ich heute bekomme und die ich auf diese Weise löse!
Grüße;
quelle
Logik zum Bestimmen, ob eine Ansicht ein Layout verwenden soll oder nicht, sollte NICHT in der
_viewStart
noch der seinView
. Das Festlegen einer Standardeinstellung in_viewStart
ist in Ordnung, aber das Hinzufügen einer Layoutlogik in der Ansicht / im Ansichtsstart verhindert, dass diese Ansicht an einer anderen Stelle (mit oder ohne Layout) verwendet wird.Ihre Controller-Aktion sollte:
return PartialView()
Indem Sie diese Art von Logik in die Ansicht einfügen, brechen Sie die Grundregel der Einzelverantwortung in M (Daten), V (visuell), C (Logik).
quelle
we could write code within our _ViewStart.cshtml file to programmatically set the Layout property for each View ... we could vary the Layout template that we use depending on what type of device is accessing the site – and have a phone or tablet optimized layout for those devices
Er wirbt eindeutig für _viewstart als einen Ort, an dem Logik zum Wechseln von Layouts verwendet werden kann (erwähnt auch Controller und Aktionsfilter). Es ist also eher eine Frage der Präferenz als der absoluten Frage, wo Layouts gewechselt werden sollen... may or may not (JSON/XML) not even be Html rendered by a View Engine
also keine Bedeutung. Ein _layout ist nur eine Ansicht, die eine Ansicht umschließt. (Sie beginnen nicht alle mit<!DOCTYPE html>
). Daher ist es möglicherweise durchaus möglich, dass _ViewStart _Layouts je nach Eigenschaft, z. B. Wochentag, ein- und ausschaltet. In einem bestimmten Kontext kann es zu einer Unterbrechung der SRP führen, wenn ControllerA für eine ViewA festgelegt wird, in welche _layout-Seite ViewA eingefügt werden soll, da dies außerhalb des SRP-Bereichs liegt. Es ist nur zur Unterstützung von ViewA <> ViewModelA vorhanden.Verwenden:
@{ Layout = null; }
um das in _ViewStart angegebene Layout zu entfernen.
quelle
Erstellen Sie die Ansicht einfach als Teilansicht, damit keine Layoutdatei verwendet wird.
quelle
Ich wollte die Anmeldeseite ohne Layout anzeigen und das funktioniert ziemlich gut für mich. (Dies ist die Datei _ViewStart.cshtml.) Sie müssen den ViewBag.Title im Controller festlegen.
@{ if (! (ViewContext.ViewBag.Title == "Login")) { Layout = "~/Views/Shared/_Layout.cshtml"; } }
Ich weiß, dass es ein bisschen spät ist, aber ich hoffe, dass dies einem Körper hilft.
quelle
Prozedur 1: Steuern Sie das Rendern von Layouts mithilfe der Datei _ViewStart im Stammverzeichnis des Ordners Ansichten
Diese Methode ist für Anfänger die einfachste Möglichkeit, das Rendern von Layouts in Ihrer ASP.NET MVC-Anwendung zu steuern. Wir können den Controller identifizieren und die Layouts als Par-Controller rendern. Dazu können wir unseren Code in die _ViewStart-Datei im Stammverzeichnis des Views-Ordners schreiben. Das folgende Beispiel zeigt, wie es gemacht werden kann.
@{ var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"].ToString(); string cLayout = ""; if (controller == "Webmaster") { cLayout = "~/Views/Shared/_WebmasterLayout.cshtml"; } else { cLayout = "~/Views/Shared/_Layout.cshtml"; } Layout = cLayout; }
Prozedur 2: Legen Sie das Layout fest, indem Sie von ActionResult zurückkehren
Eine der großartigen Funktionen von ASP.NET MVC ist, dass wir das Standard-Layout-Rendering überschreiben können, indem wir das Layout aus dem ActionResult zurückgeben. Auf diese Weise können Sie auch ein anderes Layout in Ihrer ASP.NET MVC-Anwendung rendern. Das folgende Codebeispiel zeigt, wie es gemacht werden kann.
public ActionResult Index() { SampleModel model = new SampleModel(); //Any Logic return View("Index", "_WebmasterLayout", model); }
Prozedur 3: Ansichtsweises Layout (durch Definieren des Layouts in jeder Ansicht oben)
ASP.NET MVC bietet uns eine großartige Funktion und Faxbarkeit, um das Standard-Layout-Rendering zu überschreiben, indem das Layout in der Ansicht definiert wird. Um dies zu implementieren, können wir unseren Code in jeder Ansicht folgendermaßen schreiben.
@{ Layout = "~/Views/Shared/_WebmasterLayout.cshtml"; }
Prozedur 4: Platzieren der _ViewStart-Datei in jedem der Verzeichnisse
Dies ist eine sehr nützliche Methode, um unterschiedliche Layouts für jeden Controller in Ihrer ASP.NET MVC-Anwendung festzulegen. Wenn Sie das Standardlayout für jedes Verzeichnis festlegen möchten, können Sie dies tun, indem Sie die _ViewStart-Datei in jedes der Verzeichnisse mit den erforderlichen Layoutinformationen einfügen, wie unten gezeigt:
@{ Layout = "~/Views/Shared/_WebmasterLayout.cshtml"; }
quelle
Wenn Sie mit Apps arbeiten, versuchen Sie es mit einer Reinigungslösung. Für mich behoben.
quelle