Ajax请求asp.net mvc控制器返回500 - 内部服务器错误

时间:2016-04-14 19:48:04

标签: javascript c# jquery ajax asp.net-mvc

我在视图上有这两个select

<select class="input-sm form-control input-s-sm inline" onchange="carregarCidades()" id="comboEstado">
    ...
</select>

<select class="input-sm form-control input-s-sm inline" id="comboCidade">
   ...
</select>

第一个代表一个State,当我选择它时,我想执行carregarCidades函数来加载该stat的城市,然后将它们加载到另一个select中。这是功能:

function carregarCidades() {
    var url = "@Url.Action("CarregarCidades", "Usuario")";

    var estado = $("#comboEstado").find(":selected").text();

    $.get(url, { pEstado: estado }, function (cidades) {
        $("#comboCidade").html(""); // clear before appending new list 
        $.each(cidade, function (i, cidade) {
            $("#comboCidade").append(
                $('<option></option>').val(cidade.id_cidade).html(cidade.cidade));
        });
    });
}

现在,这是UsuarioController中的CarregarCidades操作:

public ActionResult CarregarCidades(string pEstado)
{
    string cCidades = oVFP.BuscaCidade(pEstado);

    DataSet dsC = new DataSet();
    dsC.ReadXml(new StringReader(cCidades));

    JsonResult result = Json(dsC.Tables["curretorno"]);
    return result;
}

我正在调试动作,显然一切正常:

enter image description here enter image description here

但是,在Action返回Json结果之后,在jquery代码上没有调用回调函数,我的控制台中出现了500内部服务器错误。

2 个答案:

答案 0 :(得分:4)

您必须JsonAllowRequestbehavior参数AllowGet,默认情况下为DenyGet

JsonResult result = Json(dsC.Tables["curretorno"],JsonRequestBehavior.AllowGet);

您可以阅读Why it is needed on this post

答案 1 :(得分:1)

我首先要确保您的方法在其声明之上具有[WebMethod]属性。

我建议的第二件事就是回复你的Json:

return Json(result, JsonRequestBehavior.AllowGet);

通常,这些问题中的一个或两个都会导致500错误。

编辑:

可能没有必要将其声明为[WebMethod]