我在主视图中有一个partialview [_SearchProduct],让我们说[product]视图。 Partialview有多个复选框,分隔成不同的部分,例如公司搜索,按产品搜索等,只需一个[搜索]按钮。
用户可以选择多个复选框。当用户单击[搜索]按钮时,我需要将所有选中复选框的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>
请指导我&gt;&gt;
答案 0 :(得分:1)
所以听起来你有一个包含名称(公司/产品)和ID的结构。
我会创建一个看起来像
的View Model结构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));
答案 1 :(得分:0)