我有两个不同类型的列表 -
列表 列表
db表的结构如下
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>
我知道这只是一个愚蠢的逻辑错误,但我可以用一双新眼睛来做!
答案 0 :(得分:1)
如果您移除内部循环,而只是根据您选择的产品列表测试外环中的每个项目,那么您应该选择:
<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>
答案 1 :(得分:1)
试试这个:
foreach (var product in Model.Products) {
if (Model.SelectedProducts.Any(i => i.ProductID == product.Id))
{
//Your code
}
else
{
//Your code
}
}