ASP.NET MVC + jqGrid Встроенные ссылки Лучшие практики - PullRequest
0 голосов
/ 17 апреля 2009

У меня есть приложение Mvc, которое я заменяю некоторые жестко отрисованные таблицы на jqGrid [XML].

Проблема в том, что у меня есть ссылки действий в одном из моих столбцов для выполнения определенных действий над строками. Я дублировал их, используя теги CDATA в моем XML; однако проблема в том, что теперь этот тег генерируется в методе действия, поэтому весь HTML-код находится в моем контроллере (в TagBuilder), и это явно НЕ хорошо.

Я собирался заглянуть в RenderPartialExtensions, но для этого вам нужен экземпляр HtmlHelper, плюс я использую движок Brail View, поэтому я даже не уверен, что это сработает.

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

Заранее благодарим вас за ваш вклад.

Ответы [ 2 ]

0 голосов
/ 20 апреля 2009

Чтобы узнать больше об архитектуре и о том, как я решил ее. У меня есть следующие проекты / сборки:

  1. Бизнес-объекты
  2. VB XML De / Serialization библиотека
  3. Проект ASP.NET MVC

Сборка VB XML обрабатывает сериализацию бизнес-объектов, имеющих дело только с бизнес-моделью (# 1). Поэтому я бы вывел XElement примерно так:

<invoice>
   <invoiceId>1234</invoiceId>
   <customer>Hudsucker Industries</customer>
   <otherBusinessData>etc, etc</otherBusinessData>
</invoice>

Проблема возникает из-за того, что я использую jqGrid, и мне нужно добавлять элементы в каждый счет для определенных действий, поэтому мне нужно что-то вроде:

<invoice>
   <actionHtml><![CDATA[   ...some HTML such as links... ]]></actionHtml>
   <invoiceId>1234</invoiceId>
   <customer>Hudsucker Industries</customer>
   <otherBusinessData>etc, etc</otherBusinessData>
</invoice>

Я заставил его работать, но мне пришлось сгенерировать весь actionHtml в контроллере, который явно не является хорошим разделением проблем, и я потерял все свои методы HtmlHelper и тому подобное. Итак, как я в итоге решил, что «правильный» путь таков:

  1. Использование представления веб-форм (я использую представления Брайля для своих страниц) [поэтому я могу использовать атрибут страницы ContentType, чтобы установить его в XML].
  2. Передать коллекцию моих необработанных бизнес-объектов в качестве данных модели.
  3. Цикл коллекции моделей, создание элемента actonHtml для каждого счета в представлении (следовательно, получение моих методов HtmlHelper и т. Д.)
  4. Чтобы вывести фактические бизнес-элементы, я могу просто вызвать мою библиотеку VB XML и сделать: invoice.ToXml().Elements().ToString() и я в порядке.

Чтобы сделать это более пригодным для повторного использования, я создал главную страницу jqGrid, в которой есть все записи и тому подобное в областях содержимого, поэтому я могу просто передать эту информацию на реальных страницах и просто беспокоиться о выводе данных элемента.

0 голосов
/ 17 апреля 2009

Я точно не знаю, о чем вы спрашиваете, но у меня есть некоторые XML-данные - юридические данные для отмен, выпусков и т. Д. - которые я отображаю в своих представлениях. Я пошел по пути расширения HtmlHelper и создал расширение, которое берет URL документа и таблицу стилей XSLT, которая переводит его в HTML. Я использую классы LINQ XML для загрузки и рендеринга XML в HTML в MemoryStream. Затем он возвращает это как строку, которая записывается в ответ через представление. Если у вас нет доступа к помощнику HTML, вы можете написать что-то похожее на статический метод для статического класса (в любом случае это и есть расширение), но без использования синтаксиса расширения. Это может быть отображено в любом виде.

Пример моего кода:

 <%= Html.RenderXML( Url.Content( "~/App_Data/waiver.xml" ),
                     Url.Content( "~/Content/styles/waiver.xsl" ) ) %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...