";内部服务器错误“;通过ajax返回SelectList

本文关键字:通过 ajax 返回 SelectList 错误 quot 内部 服务器 | 更新日期: 2023-09-27 18:26:54

尝试从.NETMVC中的数据库中检索数据,并用它填充下拉列表。控制器代码:

public JsonResult GetCity(string name)
    {
        var cities = from c in context.Cities
                        orderby c.Name
                        select c;
        var chosenCities = cities.Where(c=>c.Name== name);
        return Json(new SelectList(chosenCities, "CityID", "Name"));
    }

jquery ajax脚本:

$(function () {
    var countrySelect = $("#country-dropdown");
    var citySelect = $("#city-dropdown");
    countrySelect.change(function () {
        citySelect.prop("disabled", false);
        citySelect.empty();
        $.ajax({
            method: "GET",
            url: "@Url.Action("GetCity")",
            data: { name: countrySelect.val() },
            dataType: ("json"),
            success: function(cities){
                $.each(cities, function(i, val){
                    citySelect.append("<option value='"" + val.CityID +
                        "'">" + val.Name + "</option>");
                });
            },
            error: function(ex, status, err){
                alert("Couldn't retrieve data: " + ex + " "
                    + status + " " + err);
            }
        });
    });
});

导致"内部服务器错误"。

";内部服务器错误“;通过ajax返回SelectList

多亏了Stephen Muecke,我解决了这个问题。查询中也有一个错误。

我试图做的是一个级联选择列表,使用两个列表;将基于来自第一列表的值来填充第二列表。因此EF查询应该是cities.Where(c=>c.Country.Name==name),如下所示。但更重要的是,我收到内部服务器错误的原因是我使用"GET"而不是"POST"来获取数据。这需要在Json(...)参数列表中添加JsonRequestBehaviour.AllowGet

public JsonResult GetCity(string name)
    {
        var cities = from c in context.Cities
                        orderby c.Name
                        select c;
        var chosenCities = cities.Where(c => c.Country.Name == name).Select(c => new{ Value = c.CityID, Text = c.Name });
        return Json(chosenCities, JsonRequestBehaviour.AllowGet);
    }

JS代码中也有一些修改。当迭代返回的数据时,City类的CityIDName属性分别绑定到作为success函数中参数提供的对象的ValueText属性。这是修改后的代码:

  $(function () {
        var countrySelect = $("#country-dropdown");
        var citySelect = $("#city-dropdown");
        countrySelect.change(function () {
                citySelect.prop("disabled", false);
                citySelect.empty();
                $.ajax({
                    method: "GET",
                    url: "@Url.Action("GetCity")",
                    data: { name: countrySelect.val() },
                dataType: ("json"),
                success: function(cities){
                    $.each(cities, function(i, val){
                        citySelect.append("<option value='"" + val.Value +
                            "'">" + val.Text + "</option>");
                    });
                },
                error: function(ex){
                    alert("Couldn't retrieve data: " + ex);
                }
                });                
        });
    });

感谢所有在这个问题上提供帮助的人。