如何进行AJAX调用

时间:2014-10-12 13:13:53

标签: javascript ajax asp.net-mvc razor

我知道这个问题之前已经得到了回答,但我无法在我的控制器中找到一个动作。

这是行动

public JsonResult GetUpdate()
{
    //get a list of valid elements
    var result = getContent();
    return Json(result, JsonRequestBehavior.AllowGet);
}

在我的剧本中:

$.ajax({
    type: 'GET',
    url: '@Url.Action("GetUpdate")',
    dataType: 'json',
    success: function (constraints) {
        alert("Application updated");
    },
    error: function (ex) {
        alert('Failed to retrieve update.' + ex);
    }
});

使用fiddler我可以点击GetUpdate但是从浏览器中Ajax调用失败。我是否正确访问了该网址?

更新: 以下是错误消息: " NetworkError:404 Not Found - protocol:// localhost:port/Controller/@Url.Action(%22GetUpdate%22)"

以下通过Fiddle工作: 协议://本地主机:端口/控制器/ GetUpdate

2 个答案:

答案 0 :(得分:1)

Razor代码(C#和所有其他服务器端脚本)仅从.cshtml文件执行,因此C#和Razor不能用于.js文件。
 '@Url.Action("GetUpdate")'不生成网址,只是一个字符串,因此您尝试请求存在protocol://domain:port/Controller@Url.Action("GetUpdate")

以下是您可以做的事情:

  • .cshtml文件中,您可以将生成的URL存储在JavaScript变量中,并将其传递给外部JS文件。
  • 您可以将外部JavaScript移至.cshtml文件,以便使用Razor。
  • 使用相对字符串路径,例如/Controller/GetUpdate

我会推荐第一个。

答案 1 :(得分:0)

你可以试试这个,其中_ApplicationPath是protocol:// localhost:port /

$.ajax({
    type: 'GET',
    url: _ApplicationPath + "/ControllerName/GetUpdate",
    dataType: 'json',
    success: function (constraints) {
        alert("Application updated");
    },
    error: function (ex) {
        alert('Failed to retrieve update.' + ex);
    }
});