2

我在主视图中有一个局部视图 [_SearchProduct],比如说 [product] 视图。Partialview 有许多复选框,它们被分成不同的部分,例如按公司搜索、按产品搜索等,只需一个 [搜索] 按钮。

一个用户可以选择多个复选框。当用户单击 [search] 按钮时,我需要将所有选定复选框的 id 传递给控制器​​操作并考虑用户的选择再次重新呈现页面。请指导我如何将选定的复选框 ID 传递给我的控制器操作。

我的部分观点如下:

<fieldset>
<legend>By Company</legend>
<table  style="border-style: none;">
   <tr>
        @{
            int i = 0;
            foreach (var item in Model.CompanyName)
            {

                i = i + 1;
            <td style="border-style: none;text-decoration:none;" >
                @Html.CheckBox("chkCompany",new {id="chkCompany_" + Model.CompanyId.Tostring()}) @Model.CompanyName
            </td>
                if (i == 5)
                {
                    @:</tr><tr>
                    i = 0;
                }

            }
        }
    </tr>
</table>
</fieldset>

<fieldset>
<legend>By Product</legend>
<table  style="border-style: none;">
    <tr>
        @{
             i = 0;
            foreach (var item in Model.Product)
            {
                i = i + 1;
            <td style="border-style: none;text-decoration:none;" >
                @Html.CheckBox("chkProduct",new {id="chkProduct_" + Model.CompanyId.Tostring()}) @Model.ProductName
            </td>
                if (i == 10)
                {
                    @:</tr><tr>
                    i = 0;
                }

            }
        }
    </tr>
</table>
</fieldset>
  • 复选框是动态的
  • 复选框 id 代表我进行过滤的各个表的主键。

请指导我>>

4

2 回答 2

1

所以听起来你有一个包含名称(公司/产品)和 ID 的结构。

我会创建一个看起来像的视图模型结构

public class PartialViewModel //Make sure this is included in your main view model
{
    public List<ObjectsToInclude> Companies { get; set; }
    public List<ObjectsToInclude> Products { get; set; }
}

public class ObjectsToInclude //Give this a better name
{
    public string Name { get; set; }
    public string Id { get; set; }
    public bool Include { get; set; }
}

然后为了绑定它们你可以做

for (int i =0; i<Model.Companies.Count(); i++)
{
   <td style="border-style: none;text-decoration:none;" >
            @Html.HiddenFor(m => m.Companies[i].Id)
            @Html.CheckBoxFor(m => m.Companies[i].Include) @Model.Companies[i].Name
   </td>
   if (i == 5)
   {
       @:</tr><tr>
       i = 0;
   }

}

然后,如果您的帖子采用的参数PartialViewModel(或某些MainViewModel包含 的实例PartialViewModel),您将拥有绑定的公司和产品列表。您可以遍历列表,并获取任何被检查内容的相应 ID。

编辑:如果您想要发布一个逗号分隔的数组,可以通过为您的复选框创建一个 onclick 事件,然后在每次单击复选框时设置隐藏输入的值。但是你的代码只能在启用 JavaScript 的情况下工作。如果您需要一个逗号分隔的字符串,您可以使用我建议的视图模型在服务器端创建它。

string companyIds = String.Join(",", model.Companies
    .Where(company => company.Include)
    .Select(company => company.Id));
于 2012-05-10T04:02:05.783 回答
0

http://dotnetnsqlcorner.blogspot.in/2012/09/multiple-checkboxes-in-mvc-3-and-post.html

于 2012-10-01T05:04:12.457 回答