Question

Je suis actuellement ASP.NET MVC apprentissage et l'utilisation Nhibernate.

Je voudrais utiliser Cascading menus déroulants. Quelqu'un at-il réussi à obtenir en cascade boîtes déroulantes travaillant dans MVC?

Mise à jour: Je l'ai regardé sur le site Web suivant: lien texte et méthode 1.

Code de contrôleur

        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;

Afficher le code

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

La liste correcte des voitures est répertorié lorsqu'un Marque avec id 1 est sélectionné, mais quand je sélectionne une autre marque la liste des modèles est vide?

Était-ce utile?

La solution

Vous pouvez lire cette TIP .

Dans cette astuce, Stephen Walter démontre trois méthodes de création de listes déroulantes en cascade. Tout d'abord, il vous montre comment modifier la liste des options affichées par une liste déroulante lorsqu'une option dans une autre modification de la liste déroulante. En second lieu, il vous montre comment exposer les données pour les listes déroulantes par une action du contrôleur. Ensuite, il vous montre comment saisir les données pour les listes déroulantes des services Web.

Autres conseils

Vous pouvez jeter un oeil à un après j'ai fait il y a quelques semaines exactement ce

  

D'abord, nous aurons besoin de configurer l'action du contrôleur 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;  
} 
  

Cette méthode nous donne maintenant la possibilité d'utiliser le nifty $.getJSON jquery   appel. La signature de l'appel est le suivant

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

Étant donné que nous avons mis en place 2 listes drop vers le bas, l'une pour les marques et la   autre pour les modèles, comme ainsi.

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

nous pouvons inclure le bit suivant de 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();

Désolé pour la prise éhontée: (

Le Conseil vous utilisez: ASP.NET MVC Astuce # 41 - Créer des listes avec Cascading Ajax Dropdown de Stephen Walther n'a pas été fait avec MVC Lache 1.0

En tant que tel, il fonctionne très bien avec le projet téléchargé (après avoir fixé quelques petits problèmes), mais quand vous essayez de l'intégrer dans la version 1.0 MVC choses pause.

Par exemple: dans le projet téléchargé, les scripts sont dans le dossier de contenu, dans la version 1.0, les scripts sont dans le dossier Scripts

.

En outre, certains (sinon tous) du * .js dans la version modifiée des paris et CTPs. Cela peut être un problème aussi.

J'ai téléchargé son projet (fixe quelques problèmes mineurs), et il a bien fonctionné dans ce projet (* .js).

Par exemple,

Je fixe ce qui suit comme:

CHANGEMENT: \Views\Home\index.aspx

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

A:

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

Comme vous le voyez, il y a quelques problèmes.

Ces problèmes de type avec des tutoriels et des blogs sont abondants; tout le monde veut être considéré comme un « expert » sur les nouvelles technologies d'être libéré afin qu'ils écrivent des tutoriels sur bêtas et CTPs. Le résultat est que le « Expert » aura des choses qui ne fonctionne pas avec la version finale.

Ce que vous devez trouver est un professionnel qui a posté des tutoriels. Un professionnel veillera à ce que leurs tutoriels fonctionnent. Ce que je veux dire par un professionnel est un entraîneur professionnel dans ce domaine de la technologie.

Stephen Walther a l'un des meilleurs blogs et beaucoup de bonnes choses, mais rappelez-vous qu'il est un évangéliste Microsoift. Il auteurs des livres sur la technologie MS il a donc besoin d'être actif dans le monde du blog il met donc quelques bonnes choses sur la technologie de pointe. Cela l'empêche considéré comme un expert si ses livres peuvent vendre.

Rappelez-vous, quel que soit le « Expert », il y aura des inexactitudes dans les blogs / écrits (sur la base bêtas et CTPs) lorsque vous essayez d'utiliser les informations contenues dans la version finale.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top