Путаница с MVC и как она обрабатывает формы - PullRequest
2 голосов
/ 01 марта 2012

Я хорошо разбираюсь в ASP.NET WebForms и собирался переключить свой код на MVC 3.

Я изучаю MVC, и у меня есть некоторое понимание, но есть одна проблема, которую я еще не понял.

Это выглядит так:

С помощью кода WebForms у меня была возможность создать DropDownList, который при выборе вызывал бы нажатие кнопки через Javascript, и эта кнопка вызывала бы метод, который заполнил бы другой DropDown, но оба DropDown были часть той же формы, и фактическая кнопка, которая видна пользователю (и должна быть нажата пользователем вручную), вызывает метод, который получает значения как из этих DropDowns, так и из других полей.

Дело в том, что я не знаю, как это сделать с MVC. Из моего нынешнего понимания, если я хочу отправить данные формы в приложение, оно должно следовать модели. Вот что меня так смущает (из моего нынешнего понимания), как я могу получить первый DropDown для отправки только данных из первого DropDown? Кроме того, заполнение другого выпадающего списка является немного туманной идеей и с MVC, но особенно то, что я высказал относительно первого DropDown, это то, что меня больше всего смущает.

Если кто-нибудь и может мне чем-то помочь в этом, это будет с благодарностью.

Ответы [ 3 ]

3 голосов
/ 01 марта 2012

Большая разница в том, чтобы разобраться в этом, заключается в том, что в ASP.NET MVC нет постбэков старого стиля.

В этом случае вы получаете контроль над получением новогоданные для вашего выпадающего списка.

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

Лично я бы использовал jQuery для этого, используя запрос ajax к методу контроллера, который возвращает тип JsonResult.

Что-то вроде:

$.getJSON("/MyController/GetSecondDropdownValues", function(result) {
 $.each(result, function() {
    $('#mySecondDropdown').append($("<option />").val(this.Name));
});

C #

public JsonResult GetSecondDropdownValues(string initialDropdownValue)
{
   /* Do the work to obtain the values here */
   return Json(returnedValues);
}
0 голосов
/ 04 мая 2016

Я только что вспомнил этот вопрос, который задавал пару лет назад.Другой способ - использовать $ .get (...) с jQuery (что хорошо документировано в настоящее время ...)

0 голосов
/ 01 марта 2012

Класс Asp.net придерживается иного мышления, чем asp.net mvc.Первый пытается имитировать приложение форм рабочего стола и скрывает (скрывает) детали веб-платформы.Asp.net mvc - это основанный на MVC фреймворк, на самом деле это «настоящий» веб-фреймворк, потому что он не пытается скрыть от вас что-либо связанное с вебом.

При этом данные, отправляемые браузером,на самом деле «данные для обновления модели», а не сама модель.В большинстве учебных пособий вы увидите модель представления (или ее часть), которая отправляется обратно, но это просто данные, переданные браузером.Существует много путаницы в том, что модели в приложении asp.net mvc.

как мне получить первый DropDown для отправки только данных из первого DropDown

Вы делаете этот раскрывающийся список единственным элементом формы.В asp.net mvc вы можете иметь на странице столько форм, сколько вам нужно (при условии, что вы их не смешиваете), asp.net mvc не следует образу мышления веб-форм.

В качестве альтернативы вы можете передать значение поля через ajax (с jQuery) в контроллер, который возвращает json, который будет обработан на стороне клиента.И, вероятно, именно так вы заполняете второй раскрывающийся список, когда выбирается первый, ajax-запрос отправляется действию контроллера, который возвращает содержимое второго раскрывающегося списка в виде json, который затем вставляется через javascript.

Простая подсказка для облегчения перехода на asp.net mvc: все, что связано с представлением (html - включая формы, javascript и т. Д.), Не зависит от контроллера.Представление заботится только о своей (view) модели, контроллер заботится о данных, которые он получает.Контроллер возвращает результат, который обычно является представлением, но может быть любым.Контроллер ничего не знает о деталях представления (html, js), он знает только о данных представления (модель представления).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...