我要求支持网站主页的主题化。我这样做的方法是根据当前主题动态选择母版页。
我已经设置了类似的目录结构
/shared/masterpages/theme1/Master1.master /shared/masterpages/theme1/Master2.master /shared/masterpages/theme1/Master3.master
/shared/masterpages/theme2/Master1.master /shared/masterpages/theme2/Master2.master /shared/masterpages/theme2/Master3.master
我仍然在视图中使用page指令
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/shared/masterpages/theme1/Master1.Master"%>
我仍然想利用视图的 MasterPageFile 属性,只需更改主题目录。
我只能想到三种方法来做到这一点,听起来不是很好。
选项1对我来说似乎是最好的选择。有没有人对如何做到这一点有任何想法?
答案 0 :(得分:2)
更新了建议:
由于我的原始建议没有像我预期的那样有效,这里有一种可行的方法来解决它,同时仍然保持你的动作方法干净,并尽量减少代码的重复:
ActionResult
,用于添加主名称/主题名称/选择正确母版页所需的任何信息ViewData["masterInfo"]
(或类似内容)。System.Web.Mvc.ViewPage
。如果需要,还可以创建继承自.ViewPage<T>
。ViewData["masterInfo"]
选择正确的母版页。我不确定是否需要,但不要忘记在代码之前或之后运行基本构造函数,如果有需要运行的话。System.Web.Mvc.ViewPage
。 原帖:
为什么不能在控制器级别应用ActionFilter
来设置视图的MasterPageFile
属性?如果您覆盖OnActionExecuted
,那么测试结果是否为ViewResult
并且在这种情况下将属性更改为正确的值应该不会太棘手。