2009-04-14 143 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);