Будет ли механизм представления Spark взаимодействовать с главными страницами веб-форм?

Мне очень нравится Spark, но мы уже вложили большие средства в представления на основе веб-форм. Я хотел бы начать использовать Spark без необходимости заранее конвертировать все мои существующие представления.

Единственная проблема, с которой я столкнулся с тем, чтобы Spark работал бок о бок с веб-формами, - это главные страницы. В настоящее время у меня есть искровые макеты, которые представляют собой дубликаты мастер-страниц 1 на 1.

Такое дублирование недопустимо. Меня это уже несколько раз кусало.

Есть ли способ заставить искровые представления работать в мастере веб-форм? Или чтобы представление веб-форм работало в искровом макете? Либо решит проблему дублирования.


person Craig Quillen    schedule 08.10.2009    source источник


Ответы (5)


Я добился этого, переместив большую часть содержимого моей главной страницы в частичные представления, а затем получил две главные страницы: Foo.Master и Foo.Master.spark, которые используют одни и те же вызовы Html.RenderPartial (). . Оба мастера имеют области содержимого с одинаковыми именами. Это позволяет мне использовать любой движок для данного представления и минимизировать дублирование.

Ожидается, что индивидуальный движок представления будет обрабатывать как свое главное, так и представление. Вызов IViewEngine:

FindView(System.Web.Mvc.ControllerContext controllerContext, string viewName, string masterName, bool useCache)

Он не отделяет мастер от представления.

Spark использует это для компиляции мастера в представление и других трюков с его многопроходным рендерингом.

person Tom Mayfield    schedule 25.01.2010
comment
Думаю, это разумное решение. Это не идеально, но устраняет БОЛЬШУЮ часть дублирования. - person Craig Quillen; 13.02.2010
comment
Имея движок представления, отвечающий за рендеринг как главного, так и представления, вам сложно найти какое-либо решение без дублирования или проблем с ремонтопригодностью (обертывание каждого искрового представления или представления .aspx, чтобы его можно было визуализировать с помощью альтернативного движка). Лучше всего найти маршрут, который сводит к минимуму и то, и другое. - person Tom Mayfield; 15.02.2010

Я так не думаю. Архитектурно у них есть совершенно разные и противоречивые способы рендеринга страницы. Чтобы это произошло, вам нужно сделать что-то, что эквивалентно iFrame, ужасно беспорядочный способ заставить это случиться до такой степени, что это анти-шаблон.

К тому времени, как главная страница будет прочитана, искровый двигатель будет уже готов, и наоборот.

Вы можете попытаться имитировать отрисовку главной страницы в искровом движке. Не только визуально ... Я говорю о том, чтобы собрать самодельный препроцессор мастер-страницы с помощью искры. Гребля с мотыгой не из легких.

person Rap    schedule 08.10.2009

Просто идея, попробуйте написать собственный механизм просмотра (или настроить Spark), который будет отображать запрошенное представление .spark с помощью движка Spark, а затем вызвать движок WebForms, передав ему отрисованный контент - я думаю, это должно быть возможно, но у меня есть ничего не известно об этих внутренностях. Более простой способ - сохранить обработанный HTML-код .spark в .aspx и позволить WebForms выбрать его, но производительность будет неприемлемой.

В любом случае, я бы сказал, что это должно быть возможно, но 1) потребуется сложная настройка механизмов просмотра и 2) вы потеряете большую часть функциональности Spark / макетов, поскольку ваши представления .spark в основном будут отображаться без макетов искр.

Также попробуйте спросить в списке рассылки Spark.

person queen3    schedule 08.10.2009
comment
Spark уже делает это сама. Проблема не в отображении правильного файла, а в том, что файл .spark или .aspx использует одну главную страницу. - person rball; 21.11.2009
comment
Хм, понятно. Я думаю, вы можете попробовать использовать XSLT для преобразования страницы искры в aspx. Если только вы не используете очень специфические функции. Однажды я использовал XSLT для генерации исходных текстов библиотеки C ++ / C # из XML, поэтому я думаю, что это возможно для вас. Помогает то, что Spark распознает синтаксис ‹%%›. Но на самом деле, возможно, будет проще сохранить две копии; Я не думаю, что вы слишком часто меняете мастер-страницы. - person queen3; 21.11.2009

Удачи в этом?

Мне удалось разместить искровое представление в вызове System.Web.Mvc.ViewUserControl Html.RenderView () из искрового представления. Бьюсь об заклад, я мог бы также разместить представление Spark в System.Web.Mvc.ViewUserControl, используя Html.RenderView (). Это вводит некоторые варианты (все с накладными расходами) совместного использования главной страницы:

  1. Напишите простую оболочку .ascx для представлений .spark. У них был один и тот же объект модели, оболочка могла вызывать HtmlRenderPartial в обернутом представлении.

  2. (наоборот) Напишите простую оболочку .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 

Я не знаю, что представляют собой эти пути, это похоже на путь поиска для представления индекса и пути поиска для его главной страницы. Кажется, что файл .spark не может использовать мастер-страницу .master.

Мне интересно, можно ли написать файл оболочки .master, который вызывает файл .spark с правильными областями содержимого. Некоторые Reflector'ing, вероятно, откопали бы некоторые интерфейсы, которые можно было бы заставить работать вместе.

person Frank Schwieterman    schedule 05.11.2009
comment
ха-ха то же самое. Было достаточно легко преобразовать несколько моих существующих страниц для использования Spark, и, вероятно, это было хорошей практикой. - person Frank Schwieterman; 06.11.2009

Вы можете использовать свои существующие главные страницы с очень простой страницей .aspx, которая просто вызывает Html.RenderPartial («MySparkView»), чтобы вы могли зажечь контент на существующих главных страницах.

person ScottS    schedule 21.11.2009