2009-04-14 2 views
1

Помещение: Получите содержимое выпадающего списка на основе значения, выбранного в первом. Литеральные данные успешно возвращаются. Запросы LINQ в LINQ2SQL Datacontext завершаются с ошибкой.ASP.NET MVC, jQuery/AJAX каскадирование выпадающих списков с LINQ2SQL?

Будучи полным новичком в этом материале MVC/LINQ/jQuery, я сражался за ЧАСЫ, пытаясь понять, что было не так с моим пониманием кода. Когда я жестко закодировал свои значения, все работало нормально, но как только я попытался выполнить запрос к datacontext LINQ2SQL, начались всевозможные сверхъестественные вещи, и, наконец, когда я дублировал результаты запроса в новый объект, все снова работало! Простите мое отсутствие лингвистической доблести, когда дело доходит до LINQ, но, я думаю, это связано с «связностью» данных LINQ2SQL. Когда я создаю еще один список, представляющий запрошенные данные, все хорошо, но если я попытаюсь использовать сами запрошенные данные, мир jQuery развалится (и без ошибок тоже - что затруднило его выяснение).

В основном я хотел бы упомянуть о «связности» LINQ2SQL или о том, как/почему это проблема, особенно в этих ситуациях удаленного/асинхронного вызова!

Смотрите ниже код - надеюсь, что это имеет смысл & спасибо заранее :) Basic Layout:

<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

Первоначально это был просто

SelectList() { new ListItem() { Text = "--Select A Case Nature--", Value = "" }}
и он работал просто отлично ! Тогда я попытался

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

Это не удалось - не JavaScript ошибок, никаких проблем компиляции, не мог понять, пока я не пытался сбрасывать данные в новый список вручную, и я, наконец, остановились на:

 
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

Неужели никто не может помочь мне найти хорошую ссылку, где я могу узнать об этих и подобных проблемах с LINQ2SQL? – feemurk

ответ

1

Look here - аналогичная проблема.

+0

Perfect - я наткнулся на подобное решение! спасибо – feemurk

1

Использование JsonRequestBehavior.AllowGet в вашем предложении:

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

Смежные вопросы