ASP.NET MVC - каскадный выпадающий - PullRequest
7 голосов
/ 01 апреля 2009

В настоящее время я изучаю ASP.NET MVC и использую Nhibernate.

Я хотел бы использовать раскрывающиеся списки каскадирования. Кому-нибудь удалось заставить работать каскадные выпадающие списки в MVC?

Обновлен: Я посмотрел на следующий веб-сайт: текст ссылки и использовал метод 1.

Код контроллера

        var makeList = new SelectList(makeRepository.ListMakes (), "Id", "make",1);
        ViewData["Makes"] = makeList;

        //// Create Models view data
        var modelList = new CascadingSelectList(modelRepository.ListModels (Convert.ToInt32(makeList.SelectedValue.ToString())), "ModelID","Id", "Name");
        ViewData["Models"] = modelList;

Просмотр кода

<%= Html.DropDownList("--Select Make--","Makes")%>
<label for="Makes">Car Model:</label>    
<%= Html.CascadingDropDownList("Models", "Makes") %> 

Правильный список автомобилей отображается при выборе Марки с идентификатором 1, но когда я выбираю другую марку, список моделей пуст?

Ответы [ 4 ]

8 голосов
/ 01 апреля 2009

Вы можете прочитать это СОВЕТ .

В этом совете Стивен Уолтер демонстрирует три метода создания каскадных выпадающих списков. Сначала он показывает, как изменить список параметров, отображаемых одним раскрывающимся списком, когда изменяется параметр в другом раскрывающемся списке. Во-вторых, он показывает вам, как выставить данные для выпадающих списков с помощью действия контроллера. Далее он показывает, как получить данные для выпадающих списков из веб-сервисов.

4 голосов
/ 20 мая 2010

Возможно, вы захотите взглянуть на сообщение , которое я сделал пару недель назад именно на этом

Сначала нам нужно настроить действие контроллера JsonResult.

/// <summary></summary>  
/// Get Models
/// <param name="makeID" />  
/// <returns></returns>  
public JsonResult GetModels(string id)  
{       
   JsonResult result = new JsonResult();       
   var filteredModels = from model in homeViewModel.Models
                        where model.MakeID.ToString() == id
                        select model;       result.Data = filteredModels.ToList();
   result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;    
   return result;  
} 

Этот метод теперь дает нам возможность использовать изящные $.getJSON jquery вызов. Подпись для звонка выглядит следующим образом

jQuery.getJSON( url, [ data ], [ callback(data, textStatus) ] )

Учитывая, что мы настроили 2 выпадающих списка, один для Makes и другое для моделей, вот так.

   Html.DropDownListFor((model) => model.MakeID, new SelectList(Model.Makes, "ID", "Description"))    
   Html.DropDownListFor((model) => model.ModelID, new SelectList(Model.Models, "ID", "Description"))

мы можем включить следующий бит jquery

//Hook onto the MakeID list's onchange event  
$("#MakeID").change(function() {   
   //build the request url   
   var url = '<!--Url.Content("~/")-->' + 'Home/GetModels';

   //fire off the request, passing it the id which is the MakeID's selected item value   
   $.getJSON(url, { id: $("#MakeID").val() }, function(data) {    
      //Clear the Model list    
      $("#ModelID").empty();    
      //Foreach Model in the list, add a model option from the data returned    
      $.each(data, function(index, optionData) {       
         $("ModelID").append("<option value=" + optionData.ID +">"+ optionData.Description +"</option>"  );    
      });
   });  
}).change();

Извините за бесстыдную вилку: (

2 голосов
/ 20 мая 2010
1 голос
/ 11 апреля 2009

Используемый вами совет: Совет № 41 для ASP.NET MVC. Создание каскадных выпадающих списков с помощью Ajax от Стивена Вальтера не было выполнено с помощью MVC Realease 1.0

.

Как таковой, он отлично работает с загруженным проектом (после исправления некоторых небольших проблем), но когда вы пытаетесь включить его в MVC Release 1.0, все становится плохо.

Например: в загруженном проекте сценарии находятся в папке содержимого, в версии 1.0 сценарии находятся в папке сценариев.

Также некоторые (если не все) файлы * .js в релизе изменились по сравнению со ставками и CTP. Это тоже может быть проблемой.

Я скачал его проект (исправил несколько мелких проблем), и он хорошо работал в этом проекте (файлы * .js).

Например,

Я исправил следующее как:

ИЗМЕНЕНИЕ: \Views\Home\index.aspx

<label for="Makes">Car Make:</label>  
<%= Html.DropDownList("--Select Make--", "Makes") %>

TO:

<label for="Makes">Car Make:</label>
<%= Html.DropDownList("Makes", (SelectList)ViewData["Makes"], "--Select Make--")%>

Итак, как вы видите, есть некоторые проблемы.

Эти типовые проблемы с учебниками и блогами в изобилии; все хотят, чтобы их считали «экспертами» по выпускаемым новым технологиям, поэтому они пишут учебники по бета-версиям и ОСАГО. В результате у «Эксперта» будет материал, который не работает с финальной версией.

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

У Стивена Уолтера есть один из лучших блогов и много хороших вещей, но помните, что он является евангелистом Microsoift. Он пишет книги по технологиям MS, поэтому ему нужно быть активным в мире блогов, чтобы рассказать о передовых технологиях. Это делает его экспертом, поэтому его книги можно продавать.

Просто помните, что независимо от «Эксперта», в блогах / записях (на основе бета-версий и ОСАГО) будут неточности при попытке использовать информацию в окончательном выпуске.

...