簡體   English   中英

獲取復選框名稱 ASP.NET 核心

[英]Get checkbox names ASP.NET Core

我只想選擇選中的復選框。 我試過這個。

    <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

公共 class CheckboxParams { 公共字符串框 { 獲取; 放; }

    public bool IsChecked { get; set; }
}

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

HtmlHelper class 提供了兩種擴展方法來在 ASP.NET MVC 視圖中生成元素。 它們如下:

CheckBox()
CheckBoxFor()

在 razor 頁面中創建表單,您可以使用

@model Student

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

Html.CheckBox() 是一種松散類型的方法,它生成具有指定名稱的 isChecked boolean 和 HTML 屬性。

@Html.CheckBox("isActive", true)

在 asp.net 內核中,Model 綁定在源中查找名稱模式prefix.property_name 如果沒有找到,它只查找不帶前綴的property_name 此外,嵌套數組匹配[index].property_nameproperty_name[index].property_name

在您的代碼中,復選框的名稱與ListParams model 中的屬性不匹配。 正確的方法應該是AllCheckedParams[index].box

但是對於您的情況,您的 model 設計不正確 默認情況下,瀏覽器只會在表單提交時將選中的復選框發送到后端。 如果您選擇前兩個或后兩個(無論如何,即索引應該是連續的)復選框,則效果很好。 如果您選擇第一個和第三個復選框,它將不再起作用。 因為它們的名稱是AllCheckedParams[0].boxAllCheckedParams[2].box 它們不是數組的連續索引,因此只能匹配第一個復選框並將其傳遞給后端。

正確的方法是只需更改后端接收到的數據,如下所示:

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

如果您仍想使用 model,您需要更改 model,如下所示:

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

Controller:

[HttpPost]
public IActionResult SendTest(ListParams listParams)
{

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM