首页 文章

ASP.NET MVC,jQuery / AJAX级联下拉列表问题与LINQ2SQL?

提问于
浏览
1

前提:根据第一个中选择的值获取下拉列表的内容 . 文字数据成功返回 . LINQ2SQL Datacontext上的LINQ查询失败 .

作为这个MVC / LINQ / jQuery的新手,我一直在争取HOURS,试图弄清楚我对代码的理解是什么问题 . 当我对我的值进行硬编码时,一切正常,但是当我尝试查询LINQ2SQL datacontext时,各种奇怪的东西开始发生,最后,当我将查询结果复制到一个新对象时,一切都再次起作用!在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);
        }

2 回答

  • 1

    here - 类似的问题 .

  • 1

    在你的句子中使用JsonRequestBehavior.AllowGet:

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

相关问题