因此,我具有这些复选框,这些复选框将值传递给控制器,然后将这些值用于从数据库取回某些东西。但是,当我单击“提交”按钮时,一切正常,但是选中的复选框现在未选中。 这是视图:
<form>
@foreach(var type in types) {
<input type="checkbox" name="checkedTypes" value="@type.id" />
<label>@type.Name</label>
}
<button type="submit" class="btn customGreen">Set filters</button>
</form>
这是控制器:
public async Task < ViewResult > Index(List < int > checkedTypes)
{
var products = from p in _db.Products
select p;
if (checkedTypes.Count != 0) {
products = products.Where(p =>checkedTypes.Contains(p.TypeId));
}
return View(product);
}
有没有一种方法可以使选中的复选框在提交后保持选中状态?还是有更好的方法来处理.net核心的复选框。
答案 0 :(得分:1)
您可以将checkedTypes存储在ViewBag中,然后确定,然后确定是否需要在前端选中该复选框。
一个简单的示例如下:
查看:
@{
var types = new List<MyType>
{
new MyType{Id = 1, Name ="AA"},
new MyType{Id = 2, Name ="BB"},
new MyType{Id = 3, Name ="CC"},
};
var checkedTypes = ViewBag.checkedTypes;
}
<form method="post">
@foreach (var type in types)
{
if (checkedTypes != null && checkedTypes.Contains(type.Id))
{
<input type="checkbox" name="checkedTypes" value="@type.Id" checked />
}
else
{
<input type="checkbox" name="checkedTypes" value="@type.Id" />
}
<label>@type.Name</label>
}
<button type="submit" class="btn customGreen">Set filters</button>
</form>
控制器:
public IActionResult Index()
{
return View();
}
[HttpPost]
public async Task<ViewResult> Index(List<int> checkedTypes)
{
if (checkedTypes.Count != 0)
{
ViewBag.checkedTypes = checkedTypes;
}
return View();
}
结果: