【问题标题】:How to use Ajax.ActionLink as POST in ASP.NET MVC?如何在 ASP.NET MVC 中使用 Ajax.ActionLink 作为 POST?
【发布时间】:2021-08-10 16:19:03
【问题描述】:

所以我正在尝试从我的 ASP.NET MVC 项目中的索引页面中删除条目,这在很大程度上基于演示项目,但我不想像设置演示项目那样重定向到删除页面.我想在我的控制器中使用 post 方法删除并重新加载:

        // POST: Consumers/Delete/5
        [HttpPost]
        public async Task<ActionResult> Delete(Guid id)
        {
           // ...
        }

我使用@Html.ActionLink 进行了尝试,但我了解到它不起作用。所以这里有很多非常相似的问题,有(接受的)答案表明这应该有效:

@Ajax.ActionLink("Delete", "Delete", "Consumer", new { id = item.Id }, new AjaxOptions { HttpMethod = "POST" })

唯一的问题是它不起作用。如果我这样做,那么我会得到一个 404,它的 URL 正确但 HTTP 方法错误

我知道尽管 Ajax 链接进行了设置,但它仍在触发 GET,因为如果我将我的 POST 方法重新标记为 GET 方法,那么我将进入它。

那么有人知道我在这里缺少什么吗???

【问题讨论】:

  • 为什么从操作中删除 POST 是个大问题?有很多方法可以提交 POST,但删除这个属性会容易得多。
  • 如果我删除了 HttpPost 属性,那么我基本上将 Get 用作 Post。无论如何,访问都需要身份验证,所以它不会那么糟糕。但是进行正确的 AJAX 调用并不难。我只是想把它做好
  • 我真的很想知道为什么你认为 POST 比 GET 更正确。例如,我有 20 多年的经验,只有当我需要发送大量难以放入 URL 字符串的数据时才使用 POST。在所有其他情况下,我更喜欢 GET。而且我根本不使用任何其他方法,并且从不在操作标头中使用任何属性,例如 GET 或 POST

标签: ajax asp.net-mvc razor


【解决方案1】:

Action 链接总是生成 GET 方法。因此,只需从操作中删除 POST。

 public async Task<ActionResult> Delete(Guid id)
 {
           // ...
 }

恕我直言,最好不要为动作分配方法,因为不同的浏览器可以生成不同的方法。

【讨论】:

    猜你喜欢
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多