【问题标题】:HTTP 404 with Ajax.ActionLink带有 Ajax.ActionLink 的 HTTP 404
【发布时间】:2011-03-25 19:22:38
【问题描述】:

我无法解决 404 错误:

Global.asax.cs 中的默认路由:

routes.MapRoute(
       "Default", 
       "{controller}/{action}/{id}",
       new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

视频控制器.cs:

[HttpPost]
public ActionResult Save(int id)
{
   try
   {
     return Json(new
     {
       ID = "0"
     });
   }
   catch
   {
     return new HttpStatusCodeResult(418, "I'm a teapot");
   }
}

在我看来,ActionLink Create.cshtml:

@Ajax.ActionLink("GoSave", "Save", "Video", new { id = 1 },
        new AjaxOptions { OnFailure = "Error", OnSuccess = "Saved", 
                          HttpMethod = "POST" })

actionlink的url按预期呈现:/Video/Save/1

当我点击链接时,我得到一个 404。

我没看到什么?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 routing


    【解决方案1】:

    我打赌你错过了 script 包含:

    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
    

    这将不显眼地 AJAXify Ajax.ActionLink 生成的结果并执行 POST 请求,而不是默认的 GET 请求。您收到 404 是因为您没有包含此脚本,因此发送了一个 GET 请求,并且在能够接收 GET 请求的视频控制器上没有保存操作。

    如果您使用过FireBug,您会立即看到:浏览器只是重定向并发送 GET 请求,而不是预期的 Ajax POST 请求。

    【讨论】:

    • 再次Tnx! ;) Firebug 与 FF4 不兼容。
    • @Andrew Flierman,然后使用旧版本。我的意思是,在没有 FireBug 的情况下开发 Web 应用程序就像在没有球的情况下踢足球(甚至不考虑启用 AJAX 的 Web 应用程序)。在这两种情况下,结果都是相同的 => 未能实现最初的目标 :-)
    • @Andrew Flierman:Firebug 即使在测试版中也与 FF4 兼容。还有 Firebug 1.7 测试版,它们按预期一起玩。
    • @DarinDimitrov,你不知道rfc2324吗?
    • @zzzzBov,哈哈,不,我没有。好一个。感谢您指出。我已经从答案中删除了我的错误评论。
    【解决方案2】:

    添加到达林的答案...

    添加这个 NuGet 包,它“不显眼地设置 jQuery Ajax”。

    这个包所做的只是安装必要的脚本。

    接下来,照 Darin 所说的去做,或者等价地添加:

    @Scripts.Render("~/Scripts/jquery.unobtrusive-ajax.min.js") 
    

    到_Layout.cshtml

    【讨论】:

      猜你喜欢
      • 2012-01-21
      • 1970-01-01
      • 2013-03-10
      • 2012-07-02
      • 2020-01-03
      • 1970-01-01
      • 2016-10-20
      • 2021-02-27
      • 1970-01-01
      相关资源
      最近更新 更多