在我的ViewModel中,我有以下两个列表(一个用于显示表单中的所有可用类别,另一个用于仅用户选择的类别值):
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列表。
但是,加载页面时,所选复选框不会自动选择。
以下代码位于我的编辑GET操作中:
var vm = new ProductEditViewModel()
{
Id = product.Id,
Name = product.Name,
Categories = new List<CategoryViewModel>()
{
new CategoryViewModel() { Name = "Category 1", Value = "category1" },
new CategoryViewModel() { Name = "Category 2", Value = "category2" },
new CategoryViewModel() { Name = "Category 3", Value = "category3" }
},
SelectedCategoryValues = productCategories.Select(c => c.Value).ToList()
};
return View(vm);
答案 0 :(得分:1)
您需要在bool IsSelected{get;set;}
中添加CategoryViewModel
之类的内容,并在控制器中指定值。
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>
}