335 Stimmen

Wie kann ich verschiedene Layouts in der ASP.NET MVC 3 Razor ViewStart-Datei angeben?

Ich möchte 2 separate Layouts in meiner Anwendung haben. Sagen wir, eines ist für den öffentlichen Bereich der Website und das andere ist für die Mitglieder-Seite.

Der Einfachheit halber sei gesagt, dass die gesamte Logik für jede dieser Seiten in 2 verschiedenen Controllern untergebracht ist.

  • PublicController
  • StaffController

Und dass sie jeweils ein entsprechendes Layout für alle darunter liegenden Ansichten haben.

  • _PublicLayout.cshtml
  • _StaffLayout.cshtml

Wie kann ich die Datei _ViewStart.cshtml verwenden, um festzulegen, dass alle Ansichten/Aktionen unter "Public" das PublicLayout und alles unter "Staff" das StaffLayout verwenden?

584voto

Darin Dimitrov Punkte 990883

Sie könnten eine _ViewStart.cshtml Datei innerhalb der /Views/Public der den Standardordner in der Datei /Views und geben Sie das gewünschte Layout an:

@{
    Layout = "~/Views/Shared/_PublicLayout.cshtml";
}

In Analogie dazu könnte man eine andere _ViewStart.cshtml Datei innerhalb der /Views/Staff Ordner mit:

@{
    Layout = "~/Views/Shared/_StaffLayout.cshtml";
}

Sie könnten auch angeben, welches Layout verwendet werden soll, wenn ein View innerhalb einer Controller-Aktion zurückgegeben wird, aber das ist pro Aktion:

return View("Index", "~/Views/Shared/_StaffLayout.cshtml", someViewModel);

Eine weitere Möglichkeit ist ein benutzerdefinierter Aktionsfilter, der das Layout außer Kraft setzt. Wie Sie sehen können, gibt es viele Möglichkeiten, dies zu erreichen. Es liegt an Ihnen zu entscheiden, welche für Ihr Szenario am besten geeignet ist.


UPDATE:

Wie in den Kommentaren gewünscht, hier ein Beispiel für einen Aktionsfilter, der eine Musterseite auswählen würde:

public class LayoutInjecterAttribute : ActionFilterAttribute
{
    private readonly string _masterName;
    public LayoutInjecterAttribute(string masterName)
    {
        _masterName = masterName;
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        base.OnActionExecuted(filterContext);
        var result = filterContext.Result as ViewResult;
        if (result != null)
        {
            result.MasterName = _masterName;
        }
    }
}

und dekorieren Sie dann einen Controller oder eine Aktion mit diesem benutzerdefinierten Attribut, das das gewünschte Layout angibt:

[LayoutInjecter("_PublicLayout")]
public ActionResult Index()
{
    return View();
}

40voto

Shaiju T Punkte 5763

Eine weitere Methode besteht darin, das Layout innerhalb der Ansicht zu definieren:

   @{
    Layout = "~/Views/Shared/_MyAdminLayout.cshtml";
    }

Weitere Wege zu tun, finden Sie unter aquí Ich hoffe, das hilft jemandem.

19voto

Anil Sharma Punkte 605

Diese Methode ist der einfachste Weg für Anfänger, um das Rendering von Layouts in Ihrer ASP.NET MVC-Anwendung zu steuern. Wir können den Controller identifizieren und die Layouts als par-Controller rendern. Um dies zu tun, 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;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X