[英]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_name
或property_name[index].property_name
。
在您的代碼中,復選框的名稱與ListParams
model 中的屬性不匹配。 正確的方法應該是AllCheckedParams[index].box
。
但是對於您的情況,您的 model 設計不正確。 默認情況下,瀏覽器只會在表單提交時將選中的復選框發送到后端。 如果您選擇前兩個或后兩個(無論如何,即索引應該是連續的)復選框,則效果很好。 如果您選擇第一個和第三個復選框,它將不再起作用。 因為它們的名稱是AllCheckedParams[0].box
和AllCheckedParams[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.