28 января 2010

ASP.NET MVC и jQuery – Dynamic DropDowns

Встречаются ситуации, когда при разработке приложения вам нужно иметь выпадающий список, значения которого зависят от выбранного значения в другом выпадающем списке. Классический пример – форма обратной связи, подгружающей значения штатов и областей на основании выбранной страны. Например, если я выберу «United States», то во втором списке я хочу получить соответсвтующие штаты: New York, Alabama, Texas и т.д. Если же я выберу «Canada» - области Nova Scotia и Ontario. К счасть с использованием ASP.NET MVC и jQuery достичь такой функциональности довольно просто. А главное мы сможем это сделать без постбэков, используя jQuery AJAX.

Для начала убедитесь, что вы ссылаетесь на библиотеку jQuery, желательно в теге HEAD. Для этого примера взята верся jQuery 1.4. Вы можете скачать ее локально, либо использовать сервис Google:

<script src="/Scripts/jquery-1.4.min.js"type="text/javascript"></script>

или

<scriptsrc="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js" type="text/javascript"></script>

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

<table>
 <tr>
  <th>Country:</th>
  <td>
   <select id="countries">
    <option> -- Select a Country -- </option>
    <option value="1">United States</option>
    <option value="2">Canada</option>
    </select>
  </td>
 </tr><tr>
  <th>State:</th>
  <td><select id="states"></select></td>
 </tr>
</table>

Это наш контроллер, который будет снабжать нас странами и областями для выбранной страны

 var list = new object[] {};

 switch (countryID) {
  case 1:
   list = new object[] {
    new { value = 1, name = "Alabama" },
    new { value = 2, name = "Alaska" },
    new { value = 3, name = "California" }
   };
   break;
  case 2:
   list = new object[] {
    new { value = 1, name = "Ontario" },
    new { value = 2, name = "Quebec" },
    new { value = 3, name = "Nova Scotia" }
   };
   break;
 };

 return Json(list);
}

 

Значение специально захардкожены для простоты демонстрации. В реально жизни их стоить грузить из, например, базы данных или xml файла. Обратите внимание на сигнатуру метода. Мы принимаем единственный параметр countryID, который определяет какие данные должны быть возвращены. Мы также установили тип возвращаемого значения в JsonResult. Это означает, что объект, возвращаемый из метода будет сериализован как JSON объект, который может быть легко использован из jQuery. Закончив с контроллером перейдем к коду jQuery.

<script type="text/javascript">
 $(document).ready(function() {    
  $("#countries").change(function() {     
   $.post("/Home/GetStates/", { countryID: $(this).val() }, function(data) {
    populateDropdown($("#states"), data);
   });
  });
 });

 function populateDropdown(select, data) {
  select.html('');
  $.each(data, function(id, option) {
   select.append($('<option></option>').val(option.value).html(option.name));
  });       
 }
</script>

 

Разберем его. Сначала мы привязываем событие к выпадающему списку с выбором страны. Когда происходит это событие мы выполняем ассинхронный запрос метода GetStates контроллера Home. Выбранное значение страны передается в метод как переменная: { countryID: $(this).val() }. Когда мы получаем ответ мы передаем полученные данные в функцию populateDropdown, которая очищает выпадающий список штатов и областей и заполняет его новыми значениями посреством добавления элемента option и установки его параметров value и text.

Код проекта можно скачать по ссылке ниже:

DynamicDropDown.zip (37.28 kb)

Перевод статьи Dynamic Select Lists with MVC and jQuery

4 комментария:

Анонимный комментирует...

eau claire singles [url=http://loveepicentre.com/]singles game download[/url] accomodating employees with hearing impairments http://loveepicentre.com/ san diego online dating

Анонимный комментирует...

Buy Cheap Laptop Battery [url=http://www.hqlaptopbatteries.com/-5100-503-laptopbatterymodel14.html]notebook battery[/url] Asus Laptop http://www.hqlaptopbatteries.com/-16xl-laptopbatterymodel798.html Acer Laptop
Acer Laptop [url=http://www.hqlaptopbatteries.com/battery-3000wlmi-batterytype1.html]hp laptop batteries[/url] dell laptop http://www.hqlaptopbatteries.com/-1412wlmi-laptopbatterymodel1394.html Laptop AC Adapter
Find a Dell Laptop Battery [url=http://www.hqlaptopbatteries.com/battery-1694lmi-batterytype1.html]sony laptop[/url] laptop battery http://www.hqlaptopbatteries.com/-a55-s129-laptopbatterymodel1691.html hp laptop

Анонимный комментирует...

Эх.. ну нельзя нам, россиянам давать отдыхать больше трёх дней! Я сегодня на работу забыл выйти)))) надо срочно что-то придумывать, иначе завтра отхвачу по полной.
ЗЫ Эх, надо во фрилансеры подаваться, уже давным-давно.. ну уволят, так будет повод)))))

Apoorv Chaudhary комментирует...

I completely agree with the article that communication skills are necessary, and also, you ought to never overlook them—pay special interest to your communication abilities and customer support. Make yourself find and reach out to customers even after completing the task to be a successful java programming software developer.