У меня есть несколько страниц, в частности 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);
}
}