2009-04-14 132 views
1

前提條件: 根據第一個選擇的值獲取下拉列表的內容。 文字數據成功返回。 LINQ2SQL Datacontext上的LINQ查詢失敗。ASP.NET MVC,jQuery/AJAX與LINQ2SQL級聯下拉列表問題?

作爲這個MVC/LINQ/jQuery工具中的一名新手,我最終努力瞭解HOURS,試圖弄清楚我對代碼的理解有什麼問題。當我硬編碼我的值,一切工作正常,但只要我試圖查詢LINQ2SQL數據上下文,各種各樣的奇怪的東西開始發生,最後,當我把查詢結果複製到一個新的對象一切都再次工作!請原諒我在LINQ方面缺乏語言能力,但我認爲這與LINQ2SQL數據的「連通性」有關。當我創建另一個表示查詢數據的列表時,一切都很順利,但是如果我嘗試使用查詢的數據本身,jQuery的世界就會崩潰(並且也沒有發生錯誤 - 這使得很難弄清楚)。

我基本上喜歡LINQ2SQL的「連通性」的引用或解釋,以及如何/爲什麼它是一個問題,特別是在這些遠程/異步調用情況下!

請參見下面的代碼 - 希望這是有道理的&預先感謝您:) 基本佈局:

<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 2009-04-18 07:20:56

回答

1

Look here - 類似的問題。

+0

完美 - 我偶然發現了一個類似的解決方案!謝謝 – feemurk 2009-05-17 22:15:38

1

使用JsonRequestBehavior.AllowGet在你的句子:

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