【问题标题】:.NET MVC Razor Post Action - Server Error in '/'.NET MVC Razor 发布操作-“/”中的服务器错误
【发布时间】:2018-06-01 18:43:09
【问题描述】:

我正在尝试在其他人的代码中修复此“'/' 应用程序中的服务器错误”。我假设他们正在尝试做一些聪明的事情,但从未让它发挥作用,或者发生了一些变化以使其停止工作。但是,我不知道它是否有效。

让我向您展示代码并解释行为,希望这里有人能够帮助我解决这个问题。提前谢谢你。

代码

表单上有一个删除按钮:

 <a href='@Url.Action("Delete", new { queryId = uq.Id })' class="button small" title="Click to delete this query">Delete</a>

应该是执行下面的控制器方法。

    [HttpPost]
    public ActionResult Delete(int? queryId)
    {
        var userId = CurrentUser.Id;
        UserQueryService uqs = new UserQueryService();
        uqs.Delete(userId, (int)queryId);
        return View("Index", new UserQueryService().GetByUserId(userId));
    }

但是执行永远不会进入方法。相反,我收到以下信息。

试过

因此,我从 href 链接和控制器中删除了 queryId 参数,并将其设为操作(而不是帖子)。这是我的测试代码:

<a href='@Url.Action("Delete")' class="button small" title="Click to delete this query">Delete</a>

执行进入控制器。

    //test method
    public ActionResult Delete()
    {
        var userId = CurrentUser.Id;
        UserQueryService uqs = new UserQueryService();
        return View("Index", new UserQueryService().GetByUserId(userId));
    }

谁能告诉我参数传递代码有什么问题导致它找不到控制器方法?

【问题讨论】:

标签: c# asp.net-mvc razor http-post


【解决方案1】:

除非在表单下,否则您不能执行 HttpPost。

阅读您的代码,似乎删除按钮不在表单内,这就是它引发 404 错误的原因。

将您的 ActionVerb 从 HttpPost 替换为 HttpGet:

[HttpGet] //Change this from HttpPost to HttpGet.
public ActionResult Delete(int? queryId)
{
    var userId = CurrentUser.Id;
    UserQueryService uqs = new UserQueryService();
    uqs.Delete(userId, (int)queryId);
    return View("Index", new UserQueryService().GetByUserId(userId));
}

【讨论】:

  • 删除操作正在更改数据。它应该是 POST,而不是 GET
猜你喜欢
  • 1970-01-01
  • 2014-03-08
  • 1970-01-01
  • 2012-12-01
  • 2014-01-20
  • 2013-07-04
  • 1970-01-01
  • 2019-01-13
  • 1970-01-01
相关资源
最近更新 更多