2

写真のリストを含む製品のリストのプロパティを持つ UserControl があります。.ascxには、すべてDIVの写真のコンテナとして があります。これは現在のように機能します。

<% foreach (var product in Products) { %>
    <div class="product">
        <div class="product-photos">
            <% foreach (var photo in product.Photos) { %>
                <img src="<%= photo.Url %>" alt="<%= product.Name %> Photo"/>
            <% } %>
        </div>
        <!-- Other product markup/data here... -->
    </div>
<% } %>

DIV写真がない場合は非表示にしようとしています。私の考えは、「製品写真」に属性をDIV持たrunat="server"せ、属性を与えることVisibleでした。私のループproductから来る変数を解決できないため、これは機能しません。ループからの変数にアクセスできないようにforeach見えますが、ループもサーバー上で実行されている必要があるため、意味がありません。runat="server"foreach

質問:要素に がある場合、ファイル内のループで
定義された変数にアクセスするにはどうすればよいですか? これは可能ですか?そうでない場合、私が望むことを達成する別の方法は何ですか?foreach.as*xrunat="server"

ProductsControl.ascx.cs

public partial class ProductsControl: UserControl
{
    public IList<Product> Products { get; set; }
}

製品.cs

public class Product
{
    public IList<Photo> Photos { get; set; }
    // Other properties here...
}
4

3 に答える 3

2

div を作成する前に、写真の数を確認してみませんか?

<% foreach (var product in Products) { %>
    <div class="product">
        <% if (product.Photos.Count > 0) { %>
            <div class="product-photos">
                <% foreach (var photo in product.Photos) { %>
                <img src="<%= photo.Url %>" alt="<%= product.Name %> Photo"/>
                <% } %>
            </div>
        <% } %> 
        <!-- Other product markup/data here... -->
    </div>
<% } %> 
于 2012-04-17T20:48:53.043 に答える
1

<div>写真の をテストしCountて css スタイルを設定することで、 を非表示にすることができます。

<div class="product-photos" style="<%= product.Photos.Count == 0 ? "display=none;" : "" %> ">

これでも作成さ<div>れますが、ページ上で「非表示」になります。

編集:asp:Panelをレンダリングする のようなマネージド コントロールの使用についての質問に<div>. 取得したデータに基づいて、 User Control Load イベント中にコントロールを動的に作成する必要があります。これにはchild controls、ユーザー コントロールへの追加が含まれます。

于 2012-04-17T20:13:01.617 に答える
0

こんにちは、jquery を使用してこれを処理してみてください。

 $(function() {
      $('.product-photos').each(function() {
           var div = $(this);
           if ($(div).find('img').length === 0)
                div.hide();
      });
 });

これはテストされていませんが、うまくいくはずです。

于 2012-04-17T20:13:08.090 に答える