2个列表-选中与-C#MVC匹配的元素的复选框
我有两个不同类型的列表- 名单 名单 db表的结构如下所示2个列表-选中与-C#MVC匹配的元素的复选框,c#,asp.net-mvc,list,loops,logic,C#,Asp.net Mvc,List,Loops,Logic,我有两个不同类型的列表- 名单 名单 db表的结构如下所示 Product ----------- ProductID - PK Name Description Price OwnerID - FK ... SelectedProducts --------------- SelectedProductID - PK ProductID - FK Active 因此,我有一个页面,其中用户显示了一个产品列表,他们可以选择部分或全部产品。我现在正在尝试创建一个编辑页面,其中显示完整的产品列表
Product
-----------
ProductID - PK
Name
Description
Price
OwnerID - FK
...
SelectedProducts
---------------
SelectedProductID - PK
ProductID - FK
Active
因此,我有一个页面,其中用户显示了一个产品列表,他们可以选择部分或全部产品。我现在正在尝试创建一个编辑页面,其中显示完整的产品列表,但选中已选择产品的复选框
我尝试过以下方法,但两者都给了我某种类型的副本-
方法1
这种方法给我一个产品列表,然后复制产品,因为已经选择了这些产品
<div style="margin-left: 10px; margin-top: 10px;">
<% foreach (var product in Model.Products) { %>
<% foreach (var p in Model.SelectedProducts)
{ %>
<% if (p.ProductID == product.ProductID)
{ %>
<div style="float: left; line-height: 18px; padding: 2px; margin: 2px; vertical-align: middle;
border: 1px solid grey; width: 282px;">
<input type="checkbox" name="PRODUCT_<%: product.Name %>" value="<%: ViewData["PRODUCT_" + product.ProductID] %>" checked="checked" style="vertical-align: middle; padding-left: 5px;" />
<%: Html.Truncate(product.Name, 35) %>
</div>
<% } %>
<% } %>
<div style="float: left; line-height: 18px; padding: 2px; margin: 2px; vertical-align: middle;
border: 1px solid grey; width: 282px;">
<input type="checkbox" name="PRODUCT_<%: product.Name %>" value="<%: ViewData["PRODUCT_" + product.ProductID] %>" style="vertical-align: middle; padding-left: 5px;" />
<%: Html.Truncate(product.Name, 35) %>
</div>
<% } %>
</div>
方法2
<div style="margin-left: 10px; margin-top: 10px;">
<% foreach (var product in Model.Products) { %>
<% foreach (var p in Model.SelectedProducts)
{ %>
<% if (p.ProductID == product.ProductID)
{ %>
<div style="float: left; line-height: 18px; padding: 2px; margin: 2px; vertical-align: middle;
border: 1px solid grey; width: 282px;">
<input type="checkbox" name="PRODUCT_<%: product.Name %>" value="<%: ViewData["PRODUCT_" + product.ProductID] %>" style="vertical-align: middle; padding-left: 5px;" />
<%: Html.Truncate(product.Name, 35) %>
</div>
<% } else { %>
<div style="float: left; line-height: 18px; padding: 2px; margin: 2px; vertical-align: middle; border: 1px solid grey; width: 282px;">
<input type="checkbox" name="PRODUCT_<%: product.Name %>" value="<%: ViewData["PRODUCT_" + product.ProductID] %>" checked="checked" style="vertical-align: middle; padding-left: 5px;" />
<%: Html.Truncate(product.Name, 35) %>
</div>
<% } %>
<% } %>
<% } %>
</div>
我知道这只是一个愚蠢的逻辑错误,但我可以用一双新的眼睛 如果您删除了内部循环,而只是根据所选产品列表测试外部循环中的每个项目,您应该可以:
<div style="margin-left: 10px; margin-top: 10px;">
<% foreach (var product in Model.Products) { %>
<% if (Model.SelectedProducts.Exists(x => x.ProductId == product.ProductId))
{ %>
<div style="float: left; line-height: 18px; padding: 2px; margin: 2px; vertical-align: middle;
border: 1px solid grey; width: 282px;">
<input type="checkbox" name="PRODUCT_<%: product.Name %>" value="<%: ViewData["PRODUCT_" + product.ProductID] %>" style="vertical-align: middle; padding-left: 5px;" />
<%: Html.Truncate(product.Name, 35) %>
</div>
<% } else { %>
<div style="float: left; line-height: 18px; padding: 2px; margin: 2px; vertical-align: middle; border: 1px solid grey; width: 282px;">
<input type="checkbox" name="PRODUCT_<%: product.Name %>" value="<%: ViewData["PRODUCT_" + product.ProductID] %>" checked="checked" style="vertical-align: middle; padding-left: 5px;" />
<%: Html.Truncate(product.Name, 35) %>
</div>
<% } %>
<% } %>
<% } %>
</div>
x、 ProductId==product.ProductId)
{ %>
试试这个:
foreach (var product in Model.Products) {
if (Model.SelectedProducts.Any(i => i.ProductID == product.Id))
{
//Your code
}
else
{
//Your code
}
}