什么是提供相同内容的替代视图的最佳方式

时间:2009-03-30 01:22:33

标签: asp.net-mvc

我有几页,特别是常见问题解答,推荐书,视频,我想为其提供一个链接的外部合作伙伴。内容将嵌入其网站内嵌,或显示为弹出窗口。这适用于ASP.NET MVC站点。

渴望的行为:

  • 我需要为'css-free'标记指定一个不同的'模式',例如'popup'或'inline'
  • 在某些时候,我可能需要使用其他查询参数的更高版本的页面。这就是我使用查询参数的原因 - 所以我可以轻松添加或删除内容。我不认为所需的“视图”应该确定任何动作参数。
  • 提供不同的母版页通常不是一个充分的解决方案,因为内容可能需要采用不同的格式。

我在这里提供的是一个我正在使用的完全可行的解决方案。我只是把它扔出来看看是否

  

a)有任何明显的遗漏 - 我即将把它释放到野外

     

b)我忘记使用

框架的内置功能      c)如果它有用   对任何人。

有三个View文件FAQ.aspx,这是我将在主站点上使用的主页面。这包括部分视图FAQContent.ascx。还有FAQPopup.ascx也包含FAQContent.ascx,但有不同的css文件且没有母版页。

  public class QuestionsController : Controller
    {
        [OutputCache(CacheProfile = "ContentPage", VaryByParam = "mode")]
        public ActionResult FAQ(string mode)
        {
            // determine mode
            if (mode == "popup")
            {
                // popup mode
                return FAQPopup();
            }
            else if (mode == "inline")
            {
                // popup mode
                return FAQContent();
            }

            else
            {
                // normal mode
                FAQModel model = new FAQModel()
                {
                };
                UpdateModel(model);

                return View(model);
            }
        }

        [OutputCache(CacheProfile = "ContentPage")]
        public ActionResult FAQPopup()
        {
            FAQModel model = new FAQModel()
            {

            };
            UpdateModel(model);

            return View("FAQPopup", model);
        }

        [OutputCache(CacheProfile = "ContentPage")]
        public ActionResult FAQContent()
        {
            FAQModel model = new FAQModel()
            {

            };
            UpdateModel(model);

            return View("FAQContent", model);
        }
    }

1 个答案:

答案 0 :(得分:1)

Phil Haack写了一篇很棒的文章,根据请求的扩展来处理输出。

http://haacked.com/archive/0001/01/01/handling-formats-based-on-url-extension.aspx