asp.net MVC обрабатывает зависимости между элементами управления вводом?

StackOverflow https://stackoverflow.com/questions/699026

Вопрос

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

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

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

Это было полезно?

Решение

Я бы сделал это через 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.

Другие советы

Который вы используете ASP.NET MVC несколько неуместен.В основном у вас есть три варианта для такого типа механизма пользовательского интерфейса на веб-странице.

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top