You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击Urgent按钮触发页面未找到错误,无法修改数据库状态的解决

问题原因分析
  1. 路由匹配错误:页面中硬编码URL /Urgent/@item.Id,若你的控制器不是UrgentController(比如常用的HomeController),默认路由规则{controller}/{action}/{id}会将这个URL解析为请求UrgentController的Index方法,而非当前控制器的Urgent方法,直接导致“页面无法找到”。

  2. GET请求逻辑错误:当前控制器的Urgent GET方法未执行切换Urgent字段的核心逻辑,仅查询数据后就返回Index视图,且传递的参数是id(int类型),但Index视图需要的是List<TodoTable>模型,模型类型不匹配会引发页面异常。

  3. POST方法未被触发:下拉菜单的a标签默认发起GET请求,完全不会进入POST类型的Urgent方法,数据库修改逻辑根本没有执行的机会。

解决方法

方案一:使用GET请求完成状态切换(简单直接)

1. 修正页面URL生成方式

将Index.cshtml中的a标签href替换为Url.Action生成正确路由,避免硬编码:

<li><a class="dropdown-item" href="@Url.Action("Urgent", new { id = item.Id })">@(item.Urgent ? "Unurgent" : "Urgent")</a></li>

2. 修正控制器GET方法逻辑

修改Urgent GET方法,加入状态切换和数据库保存逻辑,最后重定向回Index页面刷新列表:

[HttpGet]
public ActionResult Urgent(int id)
{
    var task = db.TodoTables.SingleOrDefault(i => i.Id == id);
    if (task != null) // 增加空值判断,防止空引用异常
    {
        task.Urgent = !task.Urgent; // 切换Urgent状态
        db.SaveChanges(); // 保存修改到数据库
    }
    return RedirectToAction("Index");
}

此时可以删除无用的POST类型Urgent方法。

方案二:使用POST请求完成状态切换(符合REST规范)

1. 替换a标签为表单提交

将Index.cshtml中的a标签替换为表单,发起POST请求:

<li>
    @using (Html.BeginForm("Urgent", "Home", new { id = item.Id }, FormMethod.Post))
    {
        <button type="submit" class="dropdown-item btn btn-link p-0 text-start">@(item.Urgent ? "Unurgent" : "Urgent")</button>
    }
</li>

注:"Home"替换为你的实际控制器名称;btn-link p-0 text-start是为了保持按钮样式和原a标签一致。

2. 修正控制器POST方法逻辑

修改POST方法,直接通过id查询数据并切换状态:

[HttpPost]
public ActionResult Urgent(int id)
{
    var task = db.TodoTables.SingleOrDefault(i => i.Id == id);
    if (task != null)
    {
        task.Urgent = !task.Urgent;
        db.SaveChanges();
    }
    return RedirectToAction("Index");
}

额外优化点

  • 避免使用C#关键字Task作为变量名,改为小写task,符合命名规范。
  • 始终增加空值判断(SingleOrDefault可能返回null),防止空引用异常。

内容的提问来源于stack exchange,提问作者Emir Bolat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 15:25:17