为什么我的路由前缀不起作用?

时间:2018-04-02 16:13:02

标签: asp.net-mvc

在浏览器的地址栏中,我有以下输入:

http://localhost:55105/Tasks/UpdateStatus/8/1

但是,我在调试时没有按下我的控制器方法。

    [Route("Tasks/UpdateStatus/{id}/{status}")]
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult UpdateStatus(int id, int status)
    {
        Task task = db.Tasks.Find(id);

        if (ModelState.IsValid)
        {
            task.Status = status;
            db.Entry(task).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(task);
    }

获取以下错误:

  '/'应用程序中的服务器错误。无法找到资源。

1 个答案:

答案 0 :(得分:1)

您的操作方法需要将参数作为 POST 传递,并且通过您在浏览器中的方式 url 来获取请求,因为参数是网址的一部分作为查询字符串。您需要的是视图中的表单,并通过表单发布值。

确保您以发布方式为您请求发送数据。

为了便于理解,您可以尝试将[HttpPost]重命名为[HttpGet]并查看它是否有效,但是当您更新数据库中的数据时,这不是上述用例的方法所以你应该使用 POST 而不是 GET