Ajax调用不能与asp.net mvc一起使用

时间:2015-12-09 08:26:23

标签: jquery ajax asp.net-mvc

以下是我的Ajax电话。

$.ajax({
    url: '@Url.Action("GetCities", "People")',
    type: 'GET',
    dataType: 'JSON',
    contentType: 'application/json; charset=utf-8',
    data: {'id' : id },
    success: function (cities) {
        alert('success');
    },
    error:function(err, result){
        alert('error');
    }
});

&安培;这是我的行动方法。

    public ActionResult GetCities(int id)
    {
        var cities = StateDB.GetCities().Where(c => c.StateId == id);
        return Json(cities, JsonRequestBehavior.AllowGet);
    }

当我尝试使用http://localhost/People/GetCities/2访问此内容时,它有效, 但它不适用于上面的ajax调用。 它给了我404'未找到'错误。 我在这做错了什么?

2 个答案:

答案 0 :(得分:0)

问题是外部js文件。 Razor引擎不能与外部js文件一起使用,因此url不正确。如果我在视图中输入相同的代码,它是有效的。感谢所有帮助过我的人。

答案 1 :(得分:0)

实际上是另一种方式:外部JS文件无法与Razor引擎一起工作(如果你考虑它就很明显)。如果您在视图(= Razor引擎覆盖的内容)中将javascript变量设置为@ Url.Action('','',),则可以在外部脚本中引用此变量。

在视图中:

<script>
var ajaxUrl = '@Url.Action("GetCities", "People")';
</script>

在您的外部脚本中(假设上面的脚本也被引用):

$.ajax({
url: ajaxUrl,
type: 'GET',
dataType: 'JSON',
contentType: 'application/json; charset=utf-8',
data: {'id' : id },
success: function (cities) {
    alert('success');
},
error:function(err, result){
    alert('error');
}

});

这不是最佳做法(因为您的外部脚本依赖于可能存在或可能不存在的变量)。