提交后复选框保持选中状态

时间:2020-10-28 18:27:43

标签: c# html asp.net-core .net-core

因此,我具有这些复选框,这些复选框将值传递给控制器​​,然后将这些值用于从数据库取回某些东西。但是,当我单击“提交”按钮时,一切正常,但是选中的复选框现在未选中。 这是视图:

<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核心的复选框。

1 个答案:

答案 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();
}

结果:

enter image description here