2016-12-23 7 views
1

ich lesen Sie, dass die MVC Art und Weise Daten zu übergeben von einer Steuerung der Ansicht über ein Ansichtsmodell getan wird, aber was ist Daten zu _Layout.cshtml vorbei, wie Seitentitel, Meta-Beschreibung, Artikel Autor, etc ...ASP.net MVC Weg Daten an _layout.cshtml übergeben?

Wie kann MVC diese Art von Daten weitergeben? Soll ich einfach ViewBag für sie verwenden?

+0

Mögliche Duplikat [Pass Daten-Layout, das für alle Seiten gemeinsam sind] (http://stackoverflow.com/questions/13225315/pass-data-to-layout-that-are-common-to-all-p Alter) – DavidG

+2

Sie können einen ViewBag für den Seitentitel verwenden, ja. Sie können auch eine Modelleigenschaft erstellen und Ihre Layout.cshtml-Datei an dieses Ansichtsmodell binden. Sie können auch Sitzungsdaten verwenden. Sie haben viele Optionen hier – mituw16

+0

ViewBag ist am einfachsten. Sie können aber auch eine [Child Action] verwenden (http://stackoverflow.com/questions/12530016/what-is-an-mvc-child-action). – Jasen

Antwort

2

Sie haben mehrere Möglichkeiten:


ViewBag und anzeigen Daten sind recht einfach zu benutzen, aber nicht immer bequem.

Es gibt ein großes Plus - Sie könnten sie an einer Stelle setzen/lesen und in einer anderen lesen - zum Beispiel könnten Sie sie in Ihrer Hauptansicht einstellen und sie in _lauout.cshtml lesen/anzeigen.


View-Komponenten sind die interessanteste neue Feature in MVC Core (meiner Meinung nach), die Sie UI-Widgets erstellen können.

Es ist ein bisschen mehr Codierung für ViewComponent (Sie müssen Controller und Ansicht erstellen), aber es ist flexibel Funktion (ich mag es) und einfach an einem Ort zu nennen, wo Sie es brauchen, nur

@await Component.InvokeAsync("NameOfCOmponent") .


Injections nicht mein Favorit, aber irgendwann usfull - zum Beispiel, wenn Sie Anzeige Benutzernamen möchten, können Sie den folgenden Code setzen Sie einfach direkt in Ihr Layout/View-Datei:

@using System.Security.Claims 
@using Microsoft.AspNetCore.Identity 
@inject UserManager<ApplicationUser> userManager 
@{ 
    var userInfo = ((await userManager?.GetUserAsync(User))?.xxx); 
    // where 'xxx' is any property of ApplicationUser model 
} 

Sie dann kann @userInfo in derselben Ansicht verwenden, um diese Information anzuzeigen.


Weitere Informationen:

Verwandte Themen