ASP.NET MVC控制器的Ajax请求返回500 - 内部服务器错误

4

我在视图中有这两个 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>

第一个代表一个州,当我选择它时,我想执行carregarCidades函数来加载该州的城市,然后将它们加载到另一个选择器中。以下是该函数:

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内部服务器错误。


你说服务器方法运行良好。你在哪里遇到500错误?在调用相同的操作方法时?你在相应请求的响应选项卡中获取到了什么其他信息? - Shyju
我在Chrome的控制台上看到了错误提示,提示是我的ajax请求出错了。 - gabsferreira
Ehsan的回答会解决这个问题。 - Shyju
2个回答

4

您需要将JsonAllowRequestbehavior参数设置为AllowGet,默认情况下它是DenyGet

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

您可以在此帖子中了解为什么需要它


1

首先,确保你的方法在声明时有[WebMethod]属性。

第二个建议是以这种方式返回Json:

return Json(result, JsonRequestBehavior.AllowGet);

通常是以下一个或两个问题导致了500错误。
编辑:
声明为[WebMethod]可能并非必要。

1
这是MVC,我们不需要WebMethod属性。 - Ehsan Sajjad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接