Как передать информацию из всплывающего окна / модального окна в базовое окно в ASP.NET MVC - PullRequest
0 голосов
/ 06 января 2010

Я пишу контактную форму в ASP.NET MVC. Пользователь будет иметь возможность прикреплять обычные файлы (используя обычные функции просмотра файлов / файлов), а также возможность искать конкретного человека и прикреплять файлы, связанные с этим человеком. Первая часть достаточно проста, но вторая часть вызывает у меня головную боль.

Для второй части я буду использовать мастер 2-3 страниц. Пользователь будет встречен с полем поиска, введите имя пользователя, поиск поиска и будет представлен список результатов. После нажатия на имя им предоставляется список связанных записей, которые они могут проверить некоторые или ни одного. Затем пользователь нажимает кнопку прикрепить, и файлы отображаются в контактной форме.

Я боюсь, что если я уйду со страницы контактов или обойду контроллеры в модальном окне (могут ли модальные окна перемещаться между страницами?) Или во всплывающем окне, я каким-то образом испорчу всю архитектуру MVC .

Я не хочу возиться с вызовами AJAX, так как мне открыть окно, запустить этот быстрый мастер поиска по 2-3 страницам, а затем записать содержимое обратно в базовое окно? Это просто вопрос базового JavaScript и HTML, или вы думаете, что это будет более сложным или AJAX просто неизбежность?

Ответы [ 2 ]

1 голос
/ 06 января 2010

Рендеринг PartialViews через jQuery - эффективный способ обновления только частей View.

Не вдаваясь в jQuery и как его использовать, давайте просто погрузимся.

В вашем View, PartialView или MasterPage, ссылка на файл сценария jQuery.

<script src="../../Scripts/ jquery-1.3.2.min.js"></script>

Прежде всего, мы собираемся создать ActionResult, который будет вызывать функция jQuery. Он точно такой же, как и любой другой ActionResult, только он не возвращает View, вместо этого он возвращает PartialView.

public ActionResult getFilteredData(string filter)
{
  //do something interesting with filter like
  //returning a list of items from a db

  //once we have our data we can return
  //a partial view giving to it the data as its model
  return PartialView("MyPartialView", returnedDataList);
}

Вот и все для ActionResult.

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

HTML выглядит так:

<div id="myPartialView">
</div>

Обратите внимание, я назвал div так же, как частичное представление. Эти два понятия никоим образом не связаны, я просто думаю, что это упрощает чтение.

Теперь для jQuery.

$.post("/MyController/getFilteredData", { filter: “dogs” },  
  function(newHTML) { 
document.getElementById("myPartialView").innerHTML = newHTML;
});

Таким образом, все, что делает jQuery - это отправляет обратно в действие, передавая фильтр «собак». Ответ от ActionResult записывается в newHTML, который затем помещается в div с именем myPartialView.

0 голосов
/ 06 января 2010

Почему Ajax такая проблема? Если вы используете Ajax, то вы можете опубликовать детали, вернуться с полностью визуализированным PartialView и отобразить его на странице.

Таким образом, вы никогда не покинете свою базовую страницу, и все будет хорошо с миром, и вы можете отправить все данные обратно на контроллер вашей базовой страницы.

Итак, подведем итоги. Каждый шаг в вашем мастере может быть частичным представлением, и по мере выполнения шагов вы можете визуализировать частичное представление в том же месте.

Альтернативой является то, что для начала все три шага должны быть на базовой странице, и вы можете показать / скрыть их по мере необходимости.

Также не забывайте принцип REST . Если вы хотите, чтобы ваш мастер был отдельным представлением, то каждое представление должно отвечать за себя. Конечно, вы можете вызвать контроллер с идентификатором или передать полную модель.

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

Просто пара идей. Я полагаю, вам решать, какой вкус лучше.

Я бы выбрал свой последний вариант. Я думаю, что передача модели представлений каждому контроллеру дает лучший результат.

Надеюсь, это поможет.

...