Frage

Ich baue eine MVC 3 -Anwendungen. Die Anwendung sollte in der Lage sein, ein anderes Layout gemäß der Subdomaine anzuzeigen (z. B. Customer1.mysit.com -> Layout1; Customer2.mysit.com -> Layout2; usw.). Es wird auch ein Layout für Mobile und Mobile und Mobile und Mobile und Mobile und Mobilgeräte haben. Dh 6.

Ich habe gesehen, dass es sich um die _viewStart.cshtml handelt, die ich nutzen kann, um die Logik für das Festlegen des Layouts durchzuführen. Aber was ich nicht bekomme, ist wo der Kontroller dafür ist? Soll ich den gesamten Code in die Ansicht schreiben?

Eine andere Frage mit Layout, wie Sie den Code für das gemeinsame Verhalten berücksichtigen? Haben Sie dafür einen Kontrollierer?

Und eine letzte, die ich das Konzept der Bereiche in ASP.NET MVC2 gesehen habe. Ist es jetzt veraltet, wo wir Rasiermesser haben?

Danke für Ihre Hilfe

Fred

War es hilfreich?

Lösung

Während Sie dies im _viewStart tun konnten, denke ich, dass ein besserer Weg wäre, a zu schreiben Benutzerdefinierte Ansichtsmotor in der basierend auf dem Benutzeragenten oder der Domäne ein anderes Layout enthalten. Dann hätten Sie gemeinsame Controller und Ansichten, nur das Layout unterscheidet sich.

Andere Tipps

Das klingt nach einer guten Zeit zum Gebrauch Viewbag.

Die Idee ist das während Onactionexecuting, Sie würden die Subdomain nachschlagen und in den Aussichtsbeutel schieben. Dies kann in einem benutzerdefinierten Basicontroller erfolgen, von dem Ihre anderen Controller erben oder von einem Actionfilter.

In Ihrem _viewStart können Sie dann eine Switch -Anweisung zu Viewbag schreiben, um das Layout zu steuern.

Zum Beispiel finden Sie hier ein Actionfilter, der ausfüllen wird @ViewBag.Subdomain In einem Ihrer Rasierer -Ansichten, einschließlich _viewStart.cshtml.

public class AddSubdomainToViewDataAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var subdomain = filterContext.HttpContext.Request.Url.Authority.Split('.').First();
        var controller = filterContext.Controller as Controller;
        controller.ViewData.Add("Subdomain", subdomain);
    }
}

Dekorieren Sie dann Ihre Controller mit diesem neuen [AddSubdomainToViewData] Attribut.

Schließlich machen Sie in _viewStart.cshtml so etwas wie folgt:

@{
    Layout = "~/Views/Shared/" + ((@ViewContext.ViewData["Subdomain"] as String) ?? String.Empty) + "_layout.cshtml";
}

Dadurch wird für jede Subdomäne ein anderes Rasierlautstift verwendet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top