将复选框列表传递给ASP.NET MVC中的控制器,以获取相关项的列表
在我的项目中,我为每个产品类别生成了一个相关筛选选项列表,并在索引视图中以名为AdvancedSearch的局部视图的形式显示它们:将复选框列表传递给ASP.NET MVC中的控制器,以获取相关项的列表,asp.net,asp.net-mvc,checkbox,html-helper,Asp.net,Asp.net Mvc,Checkbox,Html Helper,在我的项目中,我为每个产品类别生成了一个相关筛选选项列表,并在索引视图中以名为AdvancedSearch的局部视图的形式显示它们: @model IPagedList<fardashahr.Models.ProductModel> @using PagedList.Mvc; @using PagedList; <link href="~/Content/PagedList.css" rel="stylesheet" /> <
@model IPagedList<fardashahr.Models.ProductModel>
@using PagedList.Mvc;
@using PagedList;
<link href="~/Content/PagedList.css" rel="stylesheet" />
<div class="w-100">p
</div>
<div class="row w-100">
<div class="col-md-3 bg-light">
@Html.Partial("AdvancedSearch")
</div>
<div class="col-md-9">
@foreach (var item in Model)
{
<div class="col-md-3">
<a href="@Url.Action("Details","Home",new { name = item.ProductUrl })">
</a>
</div>
}
<div class="row">
@Html.PagedListPager((IPagedList)Model, page => Url.Action("Index", new { page = page, name = ViewBag.categoryName,search=ViewBag.Search , pageSize=ViewBag.PageSize }))
</div>
</div>
</div>
问题是:我不知道如何将用户选中的复选框发送到控制器。我尝试了只发送值的FormCollection。
由于我无法将IsChecked属性包含到CodingItemModel(表示每个筛选器项),因此我尝试了包含IsChecked属性的ViewModel,但在这种情况下会出现这样的错误:索引视图需要ProductModel的IpagedList,而不是ViewModel。
有没有一种使用字典的方法?
有什么想法吗?我很感激。您的上一个代码,
ActionResult
,不应该是ViewResult
?要返回ToPagedList
集合?您能展示一下您在控制器方法中所做的尝试吗?
@using fardashahr.Models;
@model FilterVM
@{
List<SpecItemsModel> options = ViewBag.filters as List<SpecItemsModel>;
}
@if (options != null)
{
<h3>Advanced Search</h3>
<form action="Home/Index" method="get">
@foreach (SpecItemsModel spec in options)
{
string label = spec.Name;
int id = spec.Id;
string name = spec.LatinName + "_" + id;
object val = spec.SpecValue != null ? spec.SpecValue : string.Empty;
<div class="w-100 form-group">
<h4 class="active">
@Html.Label("", label, new { @class = "w-100 p-2" })
</h4>
<div class="w-100 p-2">
@switch (spec.SpecType.TechCode)
{
//some other cases
case "SelectList":
SelectList selectList = SelectLists.GetDynamicList(spec.ListType.TechCode, val);
List<CodingItemModel> checkboxes = SelectLists.GetOptions(spec);
foreach (CodingItemModel item in checkboxes)
{
<div class="checkbox">
@Html.CheckBox(item.Name, false, new { @id = id, @name = item.TechCode, @class = "" })
@Html.Label(item.Name)
</div>
}
break;
default:
break;
}
@Html.ValidationMessage(name, "", new { @class = "text-danger" })
</div>
</div>
}
<div class="">
<input type="submit" class="btn btn-danger btn-block btn-lg" value="Search" />
</div>
</form>
}
public ActionResult Index(string name, int? page, string search = null, int pageSize = 5)
{
//some code
}