【问题标题】:Posting the value of the checkbox for a list of items发布项目列表的复选框的值
【发布时间】:2019-11-24 12:20:39
【问题描述】:

我仍然是学习 asp.net 核心的新手,我正面临复选框的这个问题。我有一个项目(课程)列表,顺便存储在一个 sql 表中,我在视图内的一个表中显示它们,我为复选框添加了下面的代码,但它没有发布任何值.我尝试了很多复杂的解决方案,但没有一个适合我的情况,因此非常感谢任何帮助。

  • 查看:
@foreach (Course course in Model)
{
   <tr>
      <td>@Html.CheckBoxFor(modelItem => course.isSelected)</td>
   </tr>
}

  • 模型(课程)具有以下属性:
  [DefaultValue(false)]
  public bool isSelected { get; set; }

  • 控制器:
        public async Task<ActionResult> Index(string searchString)
        {
            var courses = from m in _context.Courses
                            select m;

            ViewData["Filtering"] = searchString;

            if (searchString != null)
            {
                courses = courses.Where(m => m.Name.Contains(searchString.ToUpper().Replace(" ", "")));
            }
            return View(await courses.AsNoTracking().ToListAsync());
        }

【问题讨论】:

  • 你的控制器是什么样的?到目前为止,这段代码对我有用。
  • 它从搜索框中获取值并过滤项目。所以实际上它并没有做任何与复选框相关的事情。
  • 我不会使用这个Html helper,自己编写整个复选框标记并将唯一的name 属性传递给每个复选框,并通过调试您的Controller 得到什么来显示。

标签: c# asp.net-core


【解决方案1】:

如果您想将复选框值列表发布到HttpPost 操作,您可以为每个复选框设置相同的nameattribute,请参阅我的演示:

1.View(使用表单标签)

<form method="post">
  @foreach (Course course in Model)
  {
     <tr>
        <td> <input type="checkbox" name="courseSelectedStatus" value="@course.isSelected" />
     </tr>
  }
  <input type="submit" value="submit" />
</form>

2.动作:

[HttpPost]
 public async Task<IActionResult> Index(List<bool> courseSelectedStatus)
    {
       //other logic
        return View();
    }

由于不清楚你如何处理复选框值,你也可以参考下面的链接在列表模型中传递数据:

Bind dynamic inputs

更新(2019 年 7 月 24 日):

复选框的值是否可以存储一个 in(课程的 id),所以在控制器中,我可以循环每个 int i 并更改“isSelected”的值,因为课程有 id =我,成真? (只要复选框在被选中时可以存储一个 int 值)

是的,您可以将复选框值设置为 Id 并在控制器中接收为 List,请参阅我的以下代码:

1.查看:

 <form method="post">
  @foreach (Course course in Model)
  {
     <tr>
        <td> <input type="checkbox" name="courseSelectedStatus" value="@course.Id" />
     </tr>
  }
  <input type="submit" value="submit" />
</form>

2.动作:

[HttpPost]
    public async Task<IActionResult> Index(List<int> courseSelectedStatus)
    {
        foreach(var i in courseSelectedStatus)
        {
            var employee = await _context.Courses.Where(e => e.Id == i).FirstOrDefaultAsync();
            employee.isSelected = true;
            _context.Update(employee);
            await _context.SaveChangesAsync();
        }
        //other logic
    }

【讨论】:

  • 复选框的值是否可以存储一个 in(课程的 id),所以在控制器中,我可以遍历每个 int i 并更改“isSelected”的值,对于具有 id = i 的课程,是否为真? (只要复选框在被选中时可以存储一个 int 值)
  • @Mohammed Ezzeddine 是的,这是一个很好的解决方案。请查看我编辑的答案。
  • 哦,非常感谢。这很有帮助!
猜你喜欢
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
相关资源
最近更新 更多