Каков наилучший способ предоставления альтернативных просмотров одного и того же контента - PullRequest
0 голосов
/ 30 марта 2009

У меня есть несколько страниц, в частности FAQ, отзывы, видео, на которые я хочу предоставить внешнему партнеру ссылку на. Контент будет встроен на их сайте или показан во всплывающем окне. Это для сайта ASP.NET MVC.

Желаемое поведение:

  • Мне нужно указать другой «режим», например, «всплывающее окно» или «встроенный» для разметки «css-free»
  • В какой-то момент мне могут понадобиться более продвинутые версии страницы с использованием дополнительных параметров запроса. Вот почему я использую параметры запроса - так что я могу легко добавлять или удалять вещи. Я не думаю, что желаемый «вид» должен определяться по какому-либо из параметров действия.
  • Предоставление другой главной страницы, как правило, не является достаточным решением, поскольку содержимое может быть отформатировано по-разному.

То, что я предоставляю здесь, является полностью рабочим решением, которое я сейчас использую. Я просто выкидываю это сюда, чтобы посмотреть, если

а) есть какие-то явные упущения - я собираюсь выпустить это в дикую природу

б) есть встроенная функциональность фреймворка, который я забыл использовать

в) если это полезно кому-либо еще.

Существует три файла 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 Ответ

1 голос
/ 30 марта 2009

Фил Хаак написал отличную статью, в которой описывается вывод, основанный на расширении запроса.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...