.net MVC эквивалентен Page.ParseControl () - PullRequest
2 голосов
/ 12 декабря 2011

Мы изучаем возможность переноса нашей пользовательской .net webforms CMS на MVC.

Одной из особенностей нашей текущей CMS является возможность для пользователя добавлять модули (на самом деле просто пользовательские элементы управления .net) в редактор форматированного текста. Затем эти модули анализируются в контейнере.

plc_controls.Controls.Add(Page.ParseControl(description));

Где 'описание' - это поле из базы данных, которое содержит некоторое простое содержимое страницы и МОЖЕТ включать в разметку один или несколько пользовательских элементов управления.

Как такого рода вещи размещаются в фреймворке mvc? Я не совсем знаком с MVC, чтобы знать, с чего начать - на данный момент мы просто выясняем, имеет ли смысл этот шаг или нет.

Отредактировано на примере

В настоящее время пользователь может вводить разметку, которая может выглядеть следующим образом:

<p>Some text</p>
<cms:facilities id="facilities" membertypes="2,3,4" runat="server" />
<p>Some more text</p>

Он хранится в одном поле базы данных под названием «Описание», и в нашей веб-форме CMS я анализирую это описание в контейнере управления, как указано выше. cms: Facilities - это пользовательский веб-элемент управления, который загружается в раздел page / control файла web.config. Элемент управления просто отображает список объектов между двумя тегами абзаца.

1 Ответ

0 голосов
/ 12 декабря 2011

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

  1. Представьте все свои пользовательские элементы управления как частичные представления.
  2. Определите какую-то специальную разметку , чтобы визуализировать вашcontent.
  3. Реализация настраиваемого синтаксического анализатора для пользовательской разметки (или использование для этого сторонней библиотеки).
  4. На основе разметки визуализируйте окончательный HTML-код, содержащий все ссылки на выбранные элементы управления.пользователем.

Например, вы могли бы публиковать что-то вроде этого (используя модифицированный синтаксический анализатор BBCode *):

[p]Some text[/p]
[facilities id="facilities" membertypes="2,3,4"]
[p]Some more text[/p]

Фактически,это гораздо безопаснее , чем публикация "HTML с тегами сервера ASP.NET".Я верю, что какой-то хакер мог бы использовать ваше текущее решение для расширенного редактирования для публикации HTML-кода, который мог бы исследовать некоторый бэкдор на стороне клиента или сервера, но, возможно, я ошибаюсь ...

И снова, вы не может использовать тот же подход, который вы использовали, чтобы следовать с версией ASP.NET WebForms - в ASP.NET MVC нет такого понятия, как серверные теги.

Это, конечно, гораздо большесложнее, чем ваше предыдущее решение ASP.NET WebForms.Но AFAIK - это то, как вы должны реализовать его в ASP.NET MVC (если нет какой-либо сторонней библиотеки, способной сделать это, о которой я не знаю).

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

* См. Codekicker.BBCode для реализации BBCode в.СЕТЬ.Фактически AFAIK может быть интегрирован с markItUp! - это даст вам почти полное решение для rich-редактора бесплатно.

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