Вам необходимо отделить создание диалога от его создания, как уже упоминалось в комментариях !alertify.customModal && alertify.dialog('customModal'....
, чтобы диалог создавался только один раз.
Это создаст одноэлементное диалоговое окно, поэтому вам нужно передать обратный вызов в качестве параметра, либо в функции main
, либо в качестве настроек, а затем вызвать его в функции модального обратного вызова:
[110 ]
Затем назовите ваш пользовательский модал:
function showDialog(title, formDialog, callbackfunction, params) {
alertify.customModal($(formDialog)[0], callbackfunction)
.set('title', title); //pass callback function here
}
Я включил только соответствующие части для удобства чтения.
Для полного примера, посмотрите на реализацию встроенных диалогов: Alert , Подтвердите и Prompt .
If you insist on using ViewData as the data-carrier to the master pages (instead of using Html.RenderAction(...) from the MvcContrib project which I probably would use) then if you can identify in which cases the nested masterpage will be used, you can setup an ActionFilter to input the needed data into ViewData["departmentalData"].
Одна из возможностей - написать метод расширения как для ViewPage, так и для ViewMasterPage для получения необходимых данных. Я не уверен, но думаю, что именно это сделал Роб Конери в своем пакете Commerce.MVC . Взгляните на это.
У нас была такая же проблема. Пока что мы придумали базовый класс для всех контроллеров и защищенный метод для генерации ViewData. Мы вызываем его из всех действий, которые используют эту конкретную главную страницу.
Я обязательно отвечу на этот вопрос, чтобы узнать, что придумали другие.
Существует концепция субконтроллеров для MVC (я не уверен, что она все еще присутствует и будет внедряться в инфраструктуру MVC). Вы можете найти его в проекте mvc contrib на codeplex. Некоторое описание или сообщение в блоге можно найти здесь ...
http://mhinze.com/subcontrollers-in-aspnet-mvc/
и передача объектов этому субконтроллеру обсуждается здесь ...
http : //mhinze.com/passing-objects-to-subcontrollers/
Это не основано на мастер-страницах, но может помочь вам ...
Пока ваш контроллер устанавливает правильные ViewData для страницы, которая будет просматриваться, не имеет значения, сколько мастер-страниц используется. Или я что-то упустил?