it-swarm.com.de

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

Ich möchte 2 separate Layouts in meiner Anwendung haben. Angenommen, einer ist für den öffentlichen Bereich der Website und der andere für die Mitgliederseite.

Nehmen wir der Einfachheit halber an, dass die gesamte Logik für jede dieser Sites sauber in zwei unterschiedliche Controller eingebunden ist.

  • PublicController
  • StaffController

Und dass sie jeweils ein entsprechendes Layout für alle Ansichten unter sich haben.

  • _PublicLayout.cshtml
  • _StaffLayout.cshtml

Wie verwende ich die Datei _ViewStart.cshtml, um festzulegen, dass alle Ansichten/Aktionen unter "Öffentlich" das PublicLayout und alle unter "Mitarbeiter" das StaffLayout verwenden?

Vielen Dank!

308
Justin

Sie können eine _ViewStart.cshtml - Datei in den Ordner /Views/Public Einfügen, die die Standarddatei im Ordner /Views Überschreibt, und das gewünschte Layout angeben:

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

Analog können Sie eine weitere _ViewStart.cshtml - Datei in den Ordner /Views/Staff Einfügen mit:

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

Sie können auch angeben, welches Layout verwendet werden soll, wenn eine Ansicht innerhalb einer Controller-Aktion zurückgegeben wird. Dies ist jedoch eine Aktion:

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

Eine weitere Möglichkeit ist ein benutzerdefinierter Aktionsfilter, der das Layout überschreibt. Wie Sie sehen, gibt es viele Möglichkeiten, dies zu erreichen. Sie entscheiden selbst, welches am besten zu Ihrem Szenario passt.


AKTUALISIEREN:

Wie im Kommentarbereich angefordert, ist hier ein Beispiel für einen Aktionsfilter, der eine Masterseite 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();
}
550
Darin Dimitrov

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

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

Weitere Möglichkeiten zu tun, finden Sie hier , hoffe, dies hilft jemandem.

29
stom

Diese Methode ist die einfachste Möglichkeit für Anfänger, 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;
         }

Lesen Sie den vollständigen Artikel hier "So rendern Sie ein anderes Layout in ASP.NET MVC"

14
Anil Sharma