【问题标题】:2 Lists - Check checkbox for elements that match - C# MVC2 个列表 - 选中匹配元素的复选框 - C# MVC
【发布时间】:2012-08-31 14:38:39
【问题描述】:

我有 2 个不同类型的列表 -

列表 列表

数据库表的结构如下

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>

我知道这只是一个愚蠢的逻辑错误,但我可以用一双新的眼睛来做!

【问题讨论】:

    标签: c# asp.net-mvc list loops logic


    【解决方案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>
    

    【讨论】:

      【解决方案2】:

      试试这个:

         foreach (var product in Model.Products) {
             if (Model.SelectedProducts.Any(i => i.ProductID == product.Id))
            {
             //Your code
            }
            else
            {
             //Your code
            }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-18
        • 2015-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多