ASP.NET MVC - Setzen Sie die Hauptansicht entsprechend mit Controller
-
07-07-2019 - |
Frage
Gibt es zufällig eine einfache Möglichkeit, ein Standard -Masterview für alle Aktionen innerhalb eines bestimmten Controllers festzulegen?
Zum Beispiel, wenn ich das habe Homecontroller Ich möchte, dass alle Aktionen darin erben Site.Master standardmäßig, aber wenn ich drinnen bin AccountScalltroller Ich möchte, dass alle Aktionen die erben Admin.master usw..
Ich habe es geschafft, es mit:
return View("viewName", "masterName", objectModel);
Aber auf diese Weise muss ich es jedes Mal anwenden, wenn ich die View -Methode aufrufe.
Ich suchte nach etwas Einfacherem wie auf Rails, wo wir erklären können:
class HomeController < ApplicationController
layout 'site'
def index
end
def create
...
end
class AccountsController < ApplicationController
layout 'admin'
def index
end
def create
...
end
Ist das möglich?
Danke im Voraus
Lösung
Sie können in dieser Controller -Klasse Onactionexecuting überschreiben.
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
ViewData["MasterfileToUser"] = "site";
}
Oder wenn Sie möchten, können Sie dies in eine actionFilterAttribute verwandeln, die Sie auf dem Controller oder der Aktionsebene anwenden können
using System;
using System.Web.Mvc;
public class MasterFileFilterAttribute : ActionFilterAttribute
{
public string Master { get; set; }
public override void OnActionExecuted( ActionExecutedContext filterContext)
{
if (filterContext.Result is ViewResult)
((ViewResult)filterContext.Result).MasterName = Master;
}
}
was Sie dann wiederum wie so verwenden:
[MasterFileFilterAttribute(Master = "site")]
public class HomeController : Controller
{
// Action methods
}