2009-04-14 6 views
1

Le lieu: Obtenez le contenu d'une liste déroulante en fonction de la valeur sélectionnée dans le premier. Les données littérales sont renvoyées avec succès. Les requêtes LINQ sur un contexte de données LINQ2SQL échouent. En tant que recrue totale dans ce domaine MVC/LINQ/jQuery, j'ai lutté pendant des heures pour essayer de comprendre ce qui n'allait pas avec ma compréhension du code. Quand j'ai dur codé mes valeurs, tout a bien fonctionné, mais dès que j'ai essayé d'interroger un datacontex LINQ2SQL, toutes sortes de trucs wierd ont commencé à arriver et enfin, quand j'ai dupliqué les résultats dans un nouvel objet, tout a fonctionné! Pardonnez mon manque de prouesses linguistiques quand il s'agit de LINQ, mais je pense que cela a à voir avec la "connectivité" des données de LINQ2SQL. Quand je crée une autre liste représentant les données interrogées, tout va bien, mais si j'essaie d'utiliser les données interrogées, le monde de jQuery se désintègre (et sans erreur aussi - ce qui le rendait difficile à comprendre). Je voudrais fondamentalement une référence à ou une explication de la «connectivité» de LINQ2SQL et comment/pourquoi c'est un problème, en particulier dans ces situations d'appels à distance/asynchrones!ASP.NET MVC, jQuery/AJAX cascade des problèmes de liste déroulante avec LINQ2SQL?

Voir le code ci-dessous - espérons que ce sens & merci d'avance :) mise en page de base:

<script type="text/javascript"> 

     $(document).ready(function() { 
      $("#CaseTypeCategoryId").change(function() { 
       $.getJSON("/Cases/CaseNatures", { caseTypeCategoryId: $("#CaseTypeCategoryId option:selected").val() }, function(data) { 
        $("#CaseNatureId option").remove(); 
        $("#CaseNatureId").fillSelect(data); 
       }); 
      }); 
     }); 

    </script> 
      <p> 
       <label for="CaseTypeCategoryId">Case Type:</label> 
       <%= Html.DropDownList("CaseTypeCategoryId") %> 
      </p> 
      <p> 
       <label for="CaseNatureId">Case Nature</label> 
       <select id="CaseNatureId" name="CaseNatureId></select> 
      </p> 

Controller.aspx

Au départ, il était juste un

SelectList() { new ListItem() { Text = "--Select A Case Nature--", Value = "" }}
et cela a fonctionné très bien ! Alors j'ai essayé

 
public JsonResult CaseNatures(int caseTypeCategoryId) 
     { 
      return this.Json(_caseService.GetCaseNatures(caseTypeCategoryId) 
         .ToList()); 
     } 

Cela a échoué - aucune erreur javascript, pas de problèmes de compilation, ne pouvaient pas comprendre jusqu'à ce que je l'ai essayé le dumping des données dans une nouvelle liste manuellement et je me suis finalement installée sur:

 
public JsonResult CaseNatures(int caseTypeCategoryId) 
     { 
      List returnList = new List(); 
      returnList.Add(new ListItem() { Text = "--Select A Case Nature--", Value = "" }); 

      _caseService.GetCaseNatures(caseTypeCategoryId) 
         .ToList() 
         .ForEach(p => returnList.Add(new ListItem() { Value = p.CaseNatureId.ToString(), Text = p.CaseNatureText })); 
      return this.Json(returnList); 
     } 
+0

Est-ce que personne ne peut m'aider à trouver une bonne référence où je peux en apprendre davantage sur ces problèmes et d'autres similaires avec LINQ2SQL? – feemurk

Répondre

1

Regardez here - problème similaire.

+0

Parfait - je suis tombé sur une solution similaire! Je vous remercie – feemurk

1

Utilisez JsonRequestBehavior.AllowGet dans votre phrase:

this.Json (_caseService.GetCaseNatures (caseTypeCategoryId) .ToList(), JsonRequestBehavior.AllowGet);

Questions connexes