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

War es hilfreich?

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 
}   
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top