【问题标题】:How to make AJAX calls如何进行 AJAX 调用
【发布时间】:2014-10-13 04:13:36
【问题描述】:

我知道这个问题之前已经回答过,但我无法在我的控制器中执行操作。

这是行动

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);
    }
});

使用提琴手我可以点击 GetUpdate,但从浏览器中 Ajax 调用失败。我是否正确访问了 URL?

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

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

【问题讨论】:

  • 尝试将 URL 设置为 GetUpdate。另外,请注意相对路径。
  • 抱歉什么意思?我怎么做?我以为@url.Action 生成了相对路径?!
  • 我认为您缺少定义 GetUpdate 的控制器类名称
  • 根据错误消息(请参阅更新),情况并非如此。不过谢谢

标签: javascript ajax asp.net-mvc razor


【解决方案1】:

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

您可以这样做:

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

我会推荐第一个。

【讨论】:

    【解决方案2】:

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

    $.ajax({ 类型:'GET', url: _ApplicationPath + "/ControllerName/GetUpdate", 数据类型:'json', 成功:函数(约束){ alert("应用更新"); }, 错误:函数(例如){ alert('获取更新失败。' + ex); } });

    【讨论】:

      猜你喜欢
      • 2011-07-13
      • 1970-01-01
      • 2012-12-23
      • 2018-12-03
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多