1

我目前正在寻找一种解决方案,用户可以根据自己的喜好选择主题和布局。

假设我有一个提供 2 个主题的网站:黄色和绿色。

这两者有 2 种不同的布局:2 列和 3 列布局,并且一些局部视图的结构不同并且具有不同的功能方面。

我认为最好的方法是使用区域,但是我不希望 URL 结构发生变化。我会使用一个变量来设置执行操作时的幕后区域。

例如,我将布局设置为 3 列并使用绿色主题。我会使用 3Cols 区域和它的特定视图,但控制器实现与 2Cols 布局相同的代码,所以我不想复制控制器。

所以,我想要实现的目标是这样的:

  • 使用区域切换布局和主题
  • 为每个布局使用单个控制器
  • 独立于所选布局具有相同的 url

对此有何想法/建议?

谢谢!

4

1 回答 1

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 正在读取的会话变量中。

不需要其他任何东西!

希望这对其他人有帮助。

谢谢!

于 2012-10-29T17:55:59.217 回答