2012-01-16 6 views
1

У меня есть простой виджет, который я создал с помощью ContentPart. В ContentPart есть соответствующий драйвер, виджет можно разместить где угодно на моем сайте Orchard, и все отлично работает! Виджету необходимо захватить некоторые данные у пользователя, проверить его, обработать, а затем отобразить ответ успеха в виджете.Переопределение шаблонов виджета в Orchard CMS

Для этого я определил контроллер, который принимает запрос POST, который будет обрабатывать модель и возвращать одно и то же представление MyForm, если оно недействительно, или вернуть представление FormSuccess, если оно действительно. В шаблоне Widget Part используется @Html.Partial("MyForm"), чтобы отобразить представление MyForm, содержащее форму Ajax, которая будет обновлять ее с помощью div с ответом POST. Контроллер вернет представление MyForm или представление FormSuccess в зависимости от данных.

Проблема, с которой я столкнулся, заключается в том, что моему дизайнеру необходимо переопределить частичные представления для представления MyForm и представления FormSuccess, он может легко переопределить шаблон отображения детали, но не частичные представления.

Я думаю, причина в том, что в настоящий момент это невозможно, потому что я использую @Html.Partial("MyForm"). Я обнаружил, что если вместо этого использовать @Display(New.MyForm()), я могу переопределить представление MyForm, создав файл MyForm.cshtml в папке «Представления» для текущей темы, это именно то, что мне нужно, но как сделать эквивалент для @Display в действии контроллера?

В данный момент я делаю return this.PartialView("MyForm", model) или return this.PartialView("FormSuccess"), который будет использовать оригинальные виды, а не переопределенные. Я заметил, что есть ShapeResult, но я не уверен, что это правильно, и я не знаю, как сгенерировать параметр динамического конструктора. В идеале мне нужен вид MyForm, чтобы иметь строго типизированную модель, чтобы я мог использовать методы HtmlHelper. Ярлыки, TextboxFor и ValidationMessageFor, что невозможно, если модель динамическая?

Кто-нибудь сделал что-то подобное раньше или может предложить кому-нибудь руководство?

Спасибо, Джейсон

ответ

0

Мне удалось получить эту работу, изменив способ сборки моего модуля! Я не совсем понимаю, как это сработало, но оно есть!

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

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

Похоже, что когда модуль динамически компилируется, происходит что-то, что сопоставляет представления из моего модуля с основными видами в теме!

Это хороший link, который объясняет загрузку модуля.

0

Вы пробовали что-то вроде этого?

public ActionResult YourAction(){ 
    //where yourContent is a your widget content 
    //and _contentManager is IContentManager 
    dynamic model = _contentManager.BuildDisplay(yourContent); 
    return View((object)model); 
}