Einstellung der hintergrund in einer MVC-_Layout.cshtml-Seite

Einstellung jeder Seite der hintergrund ist relativ einfach in ASP.Net WebForms, wo Sie Zugriff auf die Page_Load-Ereignis in der code-behind einer MasterPage doch wie ist dies am besten in MVC? Nach mehreren Stunden recherche die verschiedenen alternativen, die ich wählte, um den Wert zuzuweisen, um die ViewBag durch ein "base-controller", leiten sich die nachfolgenden Steuerungen aus, die base und dann auf diesen Wert zugreifen, in der _Layout.cshtml.

Hier ist die Basis-controller, in dem ich eine url zuzuweisen, die Punkte zu einem bestimmten Bild:

public class BaseController : Controller
{
    public BaseController()
    {
        ViewBag.url = BingImageLoader.getBingImageUrl();    
    }
}

Der nächste Schritt ist die Ableitung von nachfolgenden Controller, in diesem Fall der HomeController aus, dass die Basis-Klasse:

public class HomeController : BaseController
{
    public ActionResult Index()
    {
        return View();
    }
    .
    .

Und schließlich, verwenden Sie den ViewBag in das head-element der _Layout.cshtml, um den hintergrund-Bild, Stil-Eigenschaft.

    .
    .   
    <style type="text/css">
        body {
            background-image: url(@ViewBag.url);  
            background-repeat: no-repeat;
            background-size: cover;
        }
    </style>
</head>

Diese Tat vollbringen, was ich dargelegt um zu tun; jedoch, auf dem Weg gab es eine Reihe von alternativen angegeben, einschließlich der Verwendung von ActionFilters. Um ehrlich zu sein, die Schaffung eines CustomActionFilter und mit ActionFilterAttributes und überschreiben OnActionExecuting scheint wie overkill, aber manchmal der einfachste Weg ist nicht immer der beste.

Letztlich kommt die Frage auf "gibt es einen besseren Weg?" Gibt es Nebenwirkungen durch die Einführung der Vermittler? Wenn ich das überschreiben meiner ViewBag.url in die einzelnen controller-Methoden, das Bild ändert sich entsprechend. So habe ich noch irgendwelche Probleme finden, aber möglicherweise gibt es andere Probleme, die aus diesem Ansatz.

Also wieder, "gibt es eine bessere Art und Weise"?

InformationsquelleAutor user646306 | 2015-03-14
Schreibe einen Kommentar