Использование одного общего элемента в нескольких частичных представлениях

#html #asp.net-mvc-3 #partial-views

#HTML #asp.net-mvc-3 #частичные представления

Вопрос:

У меня есть базовый ASP.Net Приложение MVC 3, которое имеет несколько контроллеров и несколько действий (и последующих представлений)

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

Каждый из этих элементов управления диалогового окна находится на отдельной странице частичного представления.

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

Для чего я пытаюсь найти решение, так это для того, чтобы нужно было создать только один экземпляр элемента «маска», независимо от количества частичных представлений диалога, которые я включаю, а затем скрипт в каждом частичном диалоговом окне будет иметь доступ к этому элементу (так что в основном он просто должен быть где-то на странице)

Единственная реальная идея, которая мне пришла в голову до сих пор, — добавить элемент «маска» на главную страницу (или на исходную страницу просмотра), и это будет означать, что он добавляется только один раз. Проблема здесь в том, что он будет добавлен, даже если он не нужен (хотя и один маленький отдельный элемент)

Я могу смириться с этим, но я хотел бы знать, есть ли лучший способ справиться с подобными сценариями?

Быстрая идея, которая пришла на ум, — это своего рода иерархия наследования главной страницы, поэтому у меня может быть DialogMasterPage, которая наследуется от стандартной текущей главной страницы. Как это звучит для подхода?

Спасибо

Ответ №1:

Чтобы сделать что-то подобное, где каждый модуль может регистрировать свою потребность в определенной вещи на главной странице, вы можете использовать HttpContext для хранения флага о том, нужно ли вам писать mask div, и просто установить это свойство в каждом частичном. В конце главной страницы, если флаг установлен, вы можете затем записать маску div, если для нее установлено значение true .

Очевидно, чтобы сделать это более чистым, вы могли бы обернуть все HtmlHelper это расширением или чем-то еще.

Комментарии:

1. Хороший ответ, вероятно, будет использовать это. Ждите награды, я назначу награду через пару дней, если никто не придумает ничего лучше.

2. Спасибо, я уже использовал этот же метод для частичных элементов, чтобы зарегистрировать их потребности в определенных библиотеках javascript, поэтому я не выписываю includes несколько раз, я думаю, что здесь применяется аналогичный принцип.

Ответ №2:

Моя первоначальная мысль заключается в том, чтобы вы использовали что-то вроде пользовательского интерфейса jQuery, где он обрабатывает маскировку для вас, или, если вы используете что-то пользовательское, вы можете загрузить содержимое для диалога через ajax, а затем показать его в одном диалоговом окне на главной странице.

Комментарии:

1. Спасибо за ответ. Я использую jQuery для отображения и обработки диалогового окна, но я никогда не работал с диалогами пользовательского интерфейса jQuery, когда впервые использовал их, поэтому предпочел бы сохранить его по-своему. Я полагаю, я мог бы создавать и удалять элемент «маска» из javascript при каждом вызове «показать диалоговое окно». Затем я мог бы включить общую библиотеку javascript для моих частичных представлений, чтобы справиться с этим.