asp.net MVC обрабатывает зависимости между элементами управления вводом? - PullRequest
2 голосов
/ 31 марта 2009

У меня есть приложение, которое имеет два зависимых раскрывающихся списка, где, если пользователь выбирает значение в поле списка A, оно обновляет доступный набор входных данных в поле списка B. Например, марка / модель автомобиля. когда пользователь выбирает производителя, список моделей будет обновляться соответствующим образом.

В winforms это просто обрабатывается в событии autopost back. Какой метод / подход я должен использовать в asp.net MVC? делается через AJAX? я просто пытаюсь освоить MVC и выстраивать стратегии для решения общих задач, которые мне предлагается выполнять на работе.

Я хотел бы поблагодарить всех, кто способствовал ответу на этот пост.

Ответы [ 3 ]

8 голосов
/ 31 марта 2009

Я бы сделал это через ajax. Если у вас есть эти элементы управления:

<select id="makes" /> и <select id="models" />

тогда вы можете сделать это с помощью jquery:

$().ready(function() {
   $("select#makes").change(function() {
        var make = this.value;          
        $.getJSON('models/list?make=' + make, function(data) {
              //load 2nd dropdown with result
        })
   });
});

Тогда вам просто понадобится действие в ModelsController, называемое List (), которое возвращает структуру данных JSON.

2 голосов
/ 31 марта 2009

То, что вы используете ASP.NET MVC, не имеет значения. У вас есть три варианта этого типа механики интерфейса пользователя на веб-странице.

  1. Если данные в ваших списках относительно невелики и нечасто меняются, проще всего просто предварительно загрузить все возможные данные на странице в начальном запросе в виде чего-то вроде массива javascript или скрытых элементов в разметка страницы. Когда значение Box A изменяется, javascript просто заменяет содержимое Box B соответствующими данными. Все это происходит без каких-либо запросов к серверу, что делает его очень быстрым. Но этот метод не работает, когда размер ваших данных влияет на время отклика начальной загрузки страницы.

  2. Если данные в ваших списках большие или часто изменяются (в течение периода времени, в течение которого пользователь будет находиться на странице, принимающей решение), унаследованный метод состоит в том, чтобы просто перезагрузить страницу с новыми аргументами запроса когда значение поля А меняется. Код на внутреннем уровне корректирует вывод на основе новых аргументов. В зависимости от сложности остальной части кода рендеринга на вашей странице, это может быть дорого.

  3. Это вариант варианта 2, и в основном это ответ, который Бен Шейрман дал относительно ajax. Вы по-прежнему загружаете содержимое поля B по требованию, когда поле A изменяется. Разница в том, что вы перезагружаете только измененную часть страницы, а не всю страницу.

Лично, если ваши данные достаточно малы, чтобы использовать вариант 1, это, вероятно, то, что я хотел бы использовать из-за их производительности. В противном случае перейдите к варианту 3, особенно если вы уже реализовали другие связанные с ajax вещи. Вариант 2, по-видимому, в наши дни считается устаревшим механиком.

1 голос
/ 31 марта 2009

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

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