C# 在ASP.NET核心MVC中,复选框列表值未绑定到查看获取请求
在我的ViewModel中,我有以下两个列表,一个用于显示表单中的所有可用类别,另一个仅用于用户选择的类别值:C# 在ASP.NET核心MVC中,复选框列表值未绑定到查看获取请求,c#,asp.net,asp.net-core,asp.net-core-mvc,C#,Asp.net,Asp.net Core,Asp.net Core Mvc,在我的ViewModel中,我有以下两个列表,一个用于显示表单中的所有可用类别,另一个仅用于用户选择的类别值: public List<CategoryViewModel> Categories{ get; set; } public List<string> SelectedCategoryValues { get; set; } 在我看来,我的一张表格中包含以下内容: @foreach (var category in Model.Categories) {
public List<CategoryViewModel> Categories{ get; set; }
public List<string> SelectedCategoryValues { get; set; }
在我看来,我的一张表格中包含以下内容:
@foreach (var category in Model.Categories) {
<div class="checkbox">
<label><input type="checkbox" name="SelectedCategoryValues"
value="@category.Value">@category.Name</label>
</div>
}
提交表单时,模型绑定器正确绑定SelectedCategoryValues列表
但是,加载页面时,所选复选框不会自动选择
以下代码位于“编辑获取”操作中:
您需要在CategoryViewModel中包含类似bool IsSelected{get;set;}的内容,并在控制器中赋值
var vm = new ProductEditViewModel()
{
Id = product.Id,
Name = product.Name,
Categories = new List<CategoryViewModel>()
{
new CategoryViewModel() { Name = "Category 1", Value = "category1",
IsSelected = productCategories.Where(c => c.Value == "category1").Count() > 0 ? true : false},
//do the same
//new CategoryViewModel() { Name = "Category 2", Value = "category2" },
//new CategoryViewModel() { Name = "Category 3", Value = "category3" }
},
//not required
//SelectedCategoryValues = productCategories.Select(c => c.Value).ToList()
};
return View(vm);
在我看来
@foreach (var category in Model.Categories) {
<div class="checkbox">
<label><input type="checkbox" checked="@category.IsSelected" name="SelectedCategoryValues"
value="@category.Value">@category.Name</label>
</div>
}
@foreach (var category in Model.Categories) {
<div class="checkbox">
<label><input type="checkbox" checked="@category.IsSelected" name="SelectedCategoryValues"
value="@category.Value">@category.Name</label>
</div>
}