2010-10-31 2 views
9

Я создаю приложение ASP.Net MVC 2 для клиента, и для этого требуется возможность определять представления. На этом сайте показано, как это сделать - http://www.umbraworks.net/bl0g/rebuildall/2009/11/17/ASP_NET_MVC_and_virtual_views, но я столкнулся с несколькими комментариями там и в других местах, что это была плохая идея. Каким будет лучший способ, позволяющий пользователям определять всю страницу? Кроме того, почему в базе данных плохая идея? Благодарю.MVC Просмотров из базы данных

Wade

+0

Я не уверен, почему кто-то проголосует за закрытие, но не могли бы вы добавить комментарий, чтобы объяснить, где я вне линии? – Wade73

+2

Это звучит как вещь, для которой вы, возможно, захотите рассмотреть систему управления контентом. – Andy

+1

Удивительно то, что я делаю. – Wade73

ответ

6

Ну, если вы можете написать приложение с помощью MVC 3 Beta вместо MVC 2 вы можете использовать эту технику:

http://buildstarted.com/2010/11/02/razor-without-mvc-part-ii/

Вы можете сохранить свой «View» в виде строки в базе данных, то просто вытащить его и передайте его в синтаксический анализатор, и все готово.

Он отлично работает.

+0

+1 и щедрость за ответ Спасибо. – Wade73

+1

Бен и Мэтт снова сделали это. Они обновили этот проект и поставили его на codeplex. http://razorengine.codeplex.com/ – Jim

1

ОК, я не большой авторитет на этом, но ...

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

Вы можете проанализировать текст, предоставленный пользователем, который формирует представление, и попытаться его дезинфицировать, но это будет сложно. Несмотря на то, что двигатель MVC выглядит так, как ваш CMS выглядит так, будто вы получаете фреймворк для тяжелого подъема для вас, он слишком силен; выражая в коде то, что пользователь не может сделать, сложнее, чем выражать в коде, что они могут делать. Вот почему (возможно) этот сайт использует уценки, а не HTML для разметки в вопросах и ответах.

Что касается базы данных, которая является плохой идеей, я думаю, что люди могут быть против этого из-за воспринимаемой проблемы с ударом db. Однако я не уверен, что это непреодолимая проблема; представление, вероятно, будет кэшировано после того, как оно было jit'ed, хотя я не уверен, вам нужно проверить это. Если это так, вам придется найти способ заставить jit запускаться снова при редактировании вида или вам придется перерабатывать сайт. Я предполагаю, что существует re-jit, потому что, когда вы изменяете файл aspx на некомпилированном сайте, среда получает уведомление о смене файла из ОС, и обновленное представление затем снова запускается в следующий раз при обращении к нему. Даже если я ошибаюсь, и взгляд вырывается из db и каждый раз, когда он используется, вы можете использовать кеширование, чтобы остановить это слишком много.

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

Что касается альтернативы, набор инструментов CMS (N2, Orchard и т. Д.) Может быть хорошей идеей.

+0

Фактически он кэширует представление, которое вызывает проблемы при редактировании, но я нашел способ обойти это. То, что я надеюсь найти, - лучший способ. – Wade73

+0

Ну, очевидный способ сделать это - изменить один из файлов, контролируемых сайтами. Прочтите web.config и добавьте в него счетчик «рециркуляции» или измените файл aspx. Затем приложение будет переработано. Это будет довольно дорого. –

Смежные вопросы