【问题标题】:Get checkbox names ASP.NET Core获取复选框名称 ASP.NET Core
【发布时间】:2021-04-23 15:39:41
【问题描述】:

我只想选中选中的复选框。我试过了。

    <input class="form-check-input" type="checkbox" name="Box" value="LDL" />
    <label for="Box">LDL</label><br>
     
    <input class="form-check-input" type="checkbox" name="Box" value="LDL" />
    <label for="Box">LDL</label><br>`enter code here`

    <input class="form-check-input" type="checkbox" name="Box" value="HDL" />
    <label for="Box">HDL</label><br>

<div class="button-holder d-flex justify-content-center">
    <button type="submit" class="btn btn-success">Send</button>
</div>

这就是行动

    [HttpPost]
    public IActionResult SendTest(ListParams listParams)
    {

    }

这是 DTO

公共类 CheckboxParams { 公共字符串框 { 获取;放; }

    public bool IsChecked { get; set; }
}

public class ListParams
{
    public ListParams()
    {
        this.AllCheckedParams = new List<CheckboxParams>();
    }
    public List<CheckboxParams> AllCheckedParams { get; set; }
}

【问题讨论】:

  • 嗨@DimitarKazakov,欢迎来到StackOverflow。请进一步详细说明您在问题中遇到的问题。您可以阅读How to create a Minimal, Reproducible Example 来更新您的问题。谢谢。
  • 你应该用asp.net-core而不是asp.net来标记你的问题。

标签: c# asp.net-core


【解决方案1】:

在 asp.net 核心中,模型绑定在源中查找名称模式 prefix.property_name。如果什么也没找到,它只查找不带前缀的property_name。此外,嵌套数组匹配[index].property_nameproperty_name[index].property_name

在您的代码中,复选框的名称与ListParams 模型中的属性不匹配。正确的方式应该是AllCheckedParams[index].box

但是对于您的场景,您的模型设计不正确。默认情况下,浏览器只会在表单提交时将选中的复选框发送到后端。如果您选择前两个或后两个(无论如何,即索引应该是连续的)复选框,则效果很好。如果您选择第一个和第三个复选框,它将不再起作用。因为他们的名字是AllCheckedParams[0].boxAllCheckedParams[2].box。它们不是数组的连续索引,因此只能匹配第一个复选框并传递给后端。

正确的方法是更改后端接收到的数据,如下所示:

[HttpPost]
public IActionResult SendTest(string[] box)
{
}

如果你还想使用模型,你需要改变模型如下:

public class ListParams
{
    public List<string> Box { get; set; }
}

控制器:

[HttpPost]
public IActionResult SendTest(ListParams listParams)
{

}

【讨论】:

    【解决方案2】:

    HtmlHelper 类提供了两种扩展方法来在 ASP.NET MVC 视图中生成元素。它们如下:

    CheckBox()
    CheckBoxFor()
    

    在剃须刀页面中创建表单,您可以使用

    @model Student
    
    @Html.CheckBoxFor(m => m.isActive)
    

    Html.CheckBox() 是一种松散类型的方法,它生成具有指定名称、isChecked 布尔值和 HTML 属性的 a。

    @Html.CheckBox("isActive", true)
    

    【讨论】:

      猜你喜欢
      • 2016-02-23
      • 2012-12-16
      • 1970-01-01
      • 2012-12-20
      • 2017-06-27
      • 1970-01-01
      • 2017-12-30
      • 1970-01-01
      • 2011-06-05
      相关资源
      最近更新 更多