将复选框列表传递给ASP.NET MVC中的控制器以获取相关项的列表

问题描述

在我的项目中,我生成了与每个产品类别相关的过滤器选项的列表,并将它们显示为“索引”视图中名为AdvancedSearch的局部视图:

@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>

在AdvancedSearch局部视图中,我需要将chechBox,其值和是否经过检查发送给控制器。这是局部视图:

    @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
}

问题是:我不知道如何将用户选择的复选框发送到控制器。我尝试了仅发送值的FormCollection。 而且由于无法将isCheched属性包含在CodingItemmodel中(代表每个过滤器项),因此我尝试了一个包含IsCheched属性viewmodel,但在这种情况下会出现此错误:索引视图需要ProductModel的IpagedList而不是viewmodel。 有没有一种方法可以使用Dictionary htmlattributes? 有任何想法吗?我很欣赏。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)