我正在寻找一种解决方案,用户可以根据自己的喜好选择主题和布局。
假设我有一个提供2个主题的网站:黄色和绿色。
这两个布局有两种不同的布局:2列和3列布局,部分局部视图的结构不同,功能也不同。
我认为最好的方法是使用区域,但我不想要的是根本不需要改变的URL结构。我会使用一个变量来设置执行动作时幕后的区域。
例如,我将布局设置为3列并使用绿色主题。 我会使用3Cols区域的特定视图,但控制器实现与2Cols布局完全相同的代码,因此,我不想复制控制器。
所以,回顾一下我想要实现的目标是:
有关于此的任何想法/建议吗?
谢谢!
答案 0 :(得分:1)
我已经设法得到了我正在寻找的工作,我认为这很简单!
我已经创建了一个BaseController类:
public class BaseController : Controller
{
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.RouteData.DataTokens["area"] = CurrentLayout;
base.OnActionExecuting(filterContext);
}
public string CurrentLayout
{
get
{
//Set a default layout if no layout is specified
if(Session["CurrentLayout"]==null)
Session["CurrentLayout"] = "Layout1";
return Session["CurrentLayout"].ToString();
}
set
{
if (string.IsNullOrWhiteSpace(value) || string.IsNullOrEmpty(value))
throw new NullReferenceException("CurrentLayout");
CurrentLayout = value;
}
}
}
然后,在会话开始时,我读取用户的配置文件,并将其选定的布局放在BaseController正在读取的会话变量中。
不需要其他任何东西!
希望这有助于其他人。
谢谢!