0

私は異なるタイプの2つのリストを持っています -

リスト リスト

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>

私はそれが単なるばかげた論理エラーであることを知っていますが、新鮮な目で行うことができます!

4

2 に答える 2

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>
于 2012-08-31T14:48:08.047 に答える
1

これを試して:

   foreach (var product in Model.Products) {
       if (Model.SelectedProducts.Any(i => i.ProductID == product.Id))
      {
       //Your code
      }
      else
      {
       //Your code
      }
    }
于 2012-08-31T14:57:57.030 に答える