ASP.NET MVC - 使用控制器相应地设置主视图

发布于 2024-08-04 19:47:56 字数 653 浏览 2 评论 0原文

有没有什么简单的方法可以为特定控制器内的所有操作设置默认的 MasterView?

例如,如果我有 HomeController,我希望其中的所有操作都继承 Site.Master 作为默认值,但如果我在 AccountsController 内我希望所有操作都继承 Admin.Master 等等。

我设法做到这一点:

return View("viewName", "masterName", objectModel);

但是通过这样做,我必须在每次调用 View 方法时应用它。

我一直在寻找一些更简单的东西,比如在 Rails 上,我们可以声明:

class HomeController < ApplicationController

  layout 'site'

   def index
   end

   def create
   ...

end

class AccountsController < ApplicationController

  layout 'admin'

  def index
  end

  def create
  ...  

end

这可能吗?

提前致谢

By any chance, is there any easy way to set a default MasterView for all the actions inside a specific controller?

For example If I have the HomeController I want all the actions inside it to inherit the Site.Master as default, but If I am inside AccountsController I want all the action to inherit the Admin.Master and so on..

I managed to do it with:

return View("viewName", "masterName", objectModel);

But by doing this I have to apply it every time I call the View method.

I was looking for something simpler like on rails where we can declare:

class HomeController < ApplicationController

  layout 'site'

   def index
   end

   def create
   ...

end

class AccountsController < ApplicationController

  layout 'admin'

  def index
  end

  def create
  ...  

end

Is that possible?

Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

街角迷惘 2024-08-11 19:47:56

您可以重写该 Controller 类中的 OnActionExecuting。

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    ViewData["MasterfileToUser"] = "site";
}       

或者,如果您愿意,可以将其转换为 ActionFilterAttribute,您可以将其应用到控制器或操作级别,

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;
    }
}

然后依次使用,如下所示:

[MasterFileFilterAttribute(Master = "site")] 
public class HomeController : Controller 
{ 
    // Action methods 
}   

You could override OnActionExecuting in that Controller class.

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    ViewData["MasterfileToUser"] = "site";
}       

Or if you like you can turn this into an ActionFilterAttribute you can apply on the controller or action level

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;
    }
}

which you then in turn use like so:

[MasterFileFilterAttribute(Master = "site")] 
public class HomeController : Controller 
{ 
    // Action methods 
}   
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文