Будет ли механизм просмотра Spark взаимодействовать с главными страницами веб-форм?
Мне очень нравится Spark, но у нас уже есть большие инвестиции в представления, основанные на веб-формах. Я хотел бы начать использовать Spark без необходимости конвертировать все мои существующие представления заранее.
Единственная проблема, с которой я сталкиваюсь, когда Spark работает параллельно с веб-формами, это главные страницы. В настоящее время у меня есть макеты искры, которые являются 1 на 1 дубликатов мастер-страниц.
Это количество дублирования не приемлемо. Я уже был укушен этим несколько раз.
Есть ли какой-нибудь способ заставить искровые представления работать в мастере веб-форм? Или для просмотра веб-форм в макете искры? Либо бы решить проблему дублирования.
5 ответов
Для этого я переместил большую часть содержимого моей главной страницы в частичные представления, а затем создал две главные страницы: Foo.Master и Foo.Master.spark, которые обе используют одни и те же вызовы Html.RenderPartial()., Оба мастера имеют одинаковые именованные области содержимого. Это позволяет мне использовать любой механизм для данного представления и делает дублирование как можно меньшим.
Предполагается, что отдельный движок представления будет обрабатывать как своего хозяина, так и представление. Вызов IViewEngine это:
FindView(System.Web.Mvc.ControllerContext controllerContext, string viewName, string masterName, bool useCache)
Это не делает мастер отдельно от вида.
Spark использует это, чтобы скомпилировать мастер в представление и другие приемы с его многопроходной визуализацией.
Я так не думаю. Архитектурно эти два имеют совершенно разные и противоречивые способы рендеринга страницы. Чтобы это произошло, вам нужно будет сделать что-то, что эквивалентно iFrame, ужасно хитрому способу сделать это до такой степени, чтобы быть анти-паттерном.
К тому времени, когда будет прочитана главная страница, двигатель искры уже будет готов, и наоборот.
Вы можете попробовать имитировать, как главная страница отображается в движке искры. Не только визуально... Я говорю о том, как собрать воедино домашний препроцессор главной страницы с помощью spark. Нелегко грести.
Вы можете использовать свои существующие главные страницы с очень простой страницей.aspx, которая просто вызывает Html.RenderPartial("MySparkView"), чтобы получить искровой контент внутри существующих главных страниц.
Просто идея, попробуйте написать собственный движок представления (или настроить Spark), который будет отображать запрошенное представление.spark с использованием движка Spark, а затем вызывать движок WebForms, передавая ему обработанный контент - я думаю, что это возможно, но у меня есть нет знаний об этих внутренних органах. Более простым способом было бы сохранить визуализированный.spark HTML в.aspx и выбрать его для WebForms, но производительность не будет приемлемой.
В любом случае, я бы сказал, что это должно быть возможно, но 1) потребуется сложная настройка движков представления и 2) вы потеряете большую часть функциональности Spark/layout, поскольку ваши представления.spark будут в основном отображаться как вообще без spark spark.
Также попробуйте спросить в списке рассылки Spark.
Удачи на этом?
Мне удалось разместить представление искры в вызове System.Web.Mvc.ViewUserControl Html.RenderView() из представления искры. Могу поспорить, что я мог бы также разместить представление Spark в System.Web.Mvc.ViewUserControl, используя Html.RenderView(). Это вводит некоторые варианты (все с накладными расходами) совместного использования главной страницы:
Напишите простую обертку.ascx для вас.spark views. У них был один и тот же объект модели, оболочка могла вызывать HtmlRenderPartial в упакованном представлении.
(наоборот) Напишите простую оболочку.spark для ваших элементов управления.ascx.
Когда я попытался использовать представление Index.spark, используя главную страницу Site.Master, я получил сообщение об ошибке:
The view 'Index' or its master could not be found. The following locations were searched:
~/Views/LfgSettings/Index.aspx
~/Views/LfgSettings/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
Layouts\Site.spark
Shared\Site.spark
Хотя я не знаю, что представляют эти пути, похоже, что это путь поиска для представления Index и пути поиска для его главной страницы. Кажется, что файл.spark не может использовать мастер-страницу.master.
Интересно, возможно ли написать файл-мастер-обертку, который вызывает файл.spark с правильными областями содержимого. Некоторый Reflector'ing, вероятно, выкопает некоторые интерфейсы, которые могут быть созданы для совместной работы.