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

Asp.Net Core中TodoTable的Urgent字段无法双向切换状态求助

问题分析与解决方案

问题根源

你的代码无法双向切换Urgent字段的核心原因是:

  • 前端通过<a>标签发起的是GET请求,仅传递了Id参数,没有传递Urgent的目标值。
  • 控制器中接收的TodoTable t对象里,Urgent属性会被默认初始化为false(bool类型的默认值)。
  • 因此当数据库中Urgent为True时,赋值false能完成切换;但当数据库中Urgent为False时,赋值false等于没有修改,自然无法切换回True。

修复方案(推荐最简洁可靠的方式)

直接在控制器中对数据库取出的当前值取反,不需要依赖前端传递状态值:

修改控制器代码

public IActionResult Urgent(int id)
{
    var task = db.TodoTables.SingleOrDefault(i => i.Id == id);
    if (task != null)
    {
        task.Urgent = !task.Urgent; // 直接对当前状态取反,实现双向切换
        db.SaveChanges();
    }
    return RedirectToAction("Index");
}

视图代码保持不变

<a class="dropdown-item" href="/TodoTables/Urgent/@item.Id">@(item.Urgent ? "Unurgent" : "Urgent")</a>

另一种可选方案(通过前端传递目标状态)

如果你希望通过前端传递要切换到的状态,可以修改视图的href,带上Urgent参数:

<a class="dropdown-item" href="/TodoTables/Urgent/@item.Id?Urgent=@(!item.Urgent)">@(item.Urgent ? "Unurgent" : "Urgent")</a>

控制器代码可以保留原结构,但建议增加空值判断:

public IActionResult Urgent(TodoTable t)
{
    var task = db.TodoTables.SingleOrDefault(i => i.Id == t.Id);
    if (task != null)
    {
        task.Urgent = t.Urgent;
        db.SaveChanges();
    }
    return RedirectToAction("Index");
}

不过这种方式依赖前端传递参数,不如后端直接取反的方式可靠。

内容的提问来源于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 16:15:26