动态管理MVC布局

时间:2013-08-07 09:43:23

标签: asp.net-mvc layout razor

我有一个小型MVC网络项目,我希望能够实现以下目标:

  1. 选择基本页面布局和基于活动域的CSS / JavaScript
  2. 可选择在会话开始时覆盖此基本/默认设置。
  3. 为了帮助实现这一目标,我创建了一个具有以下属性的布局对象:

    public class PageLayout {
       public string Reference { get; set; }
       public string Domain { get; set; }
       public string LayoutPath { get; set; }
       public string CssPath { get; set; }
       public string JavaScriptPath { get; set; }
    }
    

    我的想法是,在会话开始时,将检查URL以获取布局参数。例如:

    http://www.{Domain}.com/tech
    

    在这种情况下,将检索带有Reference“tech”的Pagelayout对象。如果未找到任何参数,则将检索具有与活动域匹配的Domain属性的Page Layout对象。

    关于实施此方法的正确方法,我有几个问题:

    1. 在MVC中实现此逻辑的最佳位置在哪里? Global.asax中的Session_Start方法似乎是一个潜在的候选人
    2. 我希望在整个会话中保留检索到的PageLayout对象。我打算通过某种管理类将它添加到Session状态。
    3. 如何为每个页面提供Pagelayout数据。我考虑创建一个自定义Controller,然后将其添加到ViewBag(来自Session),因此主视图可以实现如下所示:

      @ {     Layout = ViewBag.Pagelayout.LayoutPath; }          ...

    4. 更好/更清洁/更合适的机制是否可用于实现我的需求?

1 个答案:

答案 0 :(得分:1)

是的,有更简洁的方法可以做,比如使用一些第三方工具并将其挂钩到您的应用程序。

你可以看看这个网站,这是最近推出的最新版本 http://razorc.net/

另外看看 http://www.codeproject.com/Articles/32847/ASP-NET-MVC-Dynamic-Themes http://codeofrob.com/entries/dynamically-switching-between-master-pages-in-asp.net-mvc.html