代码之家  ›  专栏  ›  技术社区  ›  Jeff

主题和母版页

  •  0
  • Jeff  · 技术社区  · 15 年前

    我需要支持我的网站的网页制作。我这样做的方式是根据当前主题动态选择母版页。

    我设置了一个目录结构

    /共享/母版页/theme1/Master1.master /共享/母版页/theme1/Master2.master /共享/母版页/theme1/Master3.master

    /共享/母版页/主题2/Master1.master /共享/母版页/theme2/Master2.master /共享/母版页/主题2/Master3.master

    我仍然在视图中使用page指令

    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/shared/masterpages/theme1/Master1.Master"%>
    

    我还是想利用这个观点 主页文件 属性,只需更改主题目录。

    我只能想出三种方法来做这件事,没有一种听起来很好。

    1. 创建一个使用OnPreInit更改主题的自定义BaseView类 this
    2. 创建一些xml文件或数据库表,将每个视图链接到母版页文件,然后在控制器中设置此项。
    3. 构建一些工具来读取所有视图并解析它们的masterpagefile(类似于2,但可能在运行时完成)

    到目前为止,选择1似乎是最好的选择。还有人想怎么做吗?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Tomas Aschan    15 年前

    更新的建议 :

    由于我最初的建议并没有如我所期望的那样成功,这里有一个可行的方法来解决这个问题,同时保持操作方法的干净,并尽量减少代码的重复:

    1. 创建 ActionResult 这将添加母版名/主题名/任何需要选择正确母版页的信息 ViewData["masterInfo"] (或类似的东西)。
    2. 创建可创建主题视图继承的基类。当然,您的基类应该继承自 System.Web.Mvc.ViewPage . 如果需要,还可以创建继承自 .ViewPage<T> .
    3. 在基类中,创建一个构造方法,该方法根据 ViewData[“主信息”] . 我不确定是否需要,但不要忘记在代码之前或之后运行基本构造函数,如果有需要运行的话。
    4. 用属性修饰所有相关操作,并将它们的视图设置为继承基类而不是 系统.Web.Mvc.视图页 .

    原职 :
    为什么不 ActionFilter ,可应用于控制器级别,设置 MasterPageFile 风景的属性?如果你重写 OnActionExecuted ,测试结果是否为 ViewResult 在这种情况下,将属性更改为正确的值。