2017-09-12 11 views
0

私は毎月のステータスを持つモデルのリピーターを持っています。ASP WebフォームASCXリピーターのループのユーザーコントロール

は、だから私は、リピータ内部のforループを使用したいが、問題が一つの変数にアクセスできないということです

コード:

<ItemTemplate> 
<% for (int month = 1; month <= 12; month++) 
    { %> 
    <div class="DS_monthCol <%= GetStatusClassName(Item, month) %>"> 
     <asp:HyperLink ID="HyperLink1" runat="server"></asp:HyperLink> 
    </div> 

<% } %> 
</ItemTemplate> 

方法GetStatusClassNameがアクセス可能でない - 何の問題。しかし、この場合は:The name Item does not exits in the current context、それはVisual Studioからのエラーです。

私は同じようにそれを使用する場合:

の両方がアクセスできるように取得する方法

<%# GetStatusClassName(Item, month) %>

The name month does not exits in the current context

アイデアは、それを避けるためです:

<div class='DS_monthCol <%# GetStatusClassName(Item, 1) %>'> 
    <asp:HyperLink ID="HyperLink1" runat="server"></asp:HyperLink> 
</div> 
<div class='DS_monthCol <%# GetStatusClassName(Item, 2) %>'> 
    <asp:HyperLink ID="HyperLink2" runat="server"></asp:HyperLink> 
</div> 
<div class='DS_monthCol <%# GetStatusClassName(Item, 3) %>'> 
    <asp:HyperLink ID="HyperLink3" runat="server"></asp:HyperLink> 
</div> 
<div class='DS_monthCol <%# GetStatusClassName(Item, 4) %>'> 
    <asp:HyperLink ID="HyperLink4" runat="server"></asp:HyperLink> 
</div> 
<div class='DS_monthCol <%# GetStatusClassName(Item, 5) %>'> 
    <asp:HyperLink ID="HyperLink5" runat="server"></asp:HyperLink> 
</div> 
<div class='DS_monthCol <%# GetStatusClassName(Item, 6) %>'> 
    <asp:HyperLink ID="HyperLink6" runat="server"></asp:HyperLink> 
</div> 
<div class='DS_monthCol <%# GetStatusClassName(Item, 7) %>'> 
    <asp:HyperLink ID="HyperLink7" runat="server"></asp:HyperLink> 
</div> 
<div class='DS_monthCol <%# GetStatusClassName(Item, 8) %>'> 
    <asp:HyperLink ID="HyperLink8" runat="server"></asp:HyperLink> 
</div> 
<div class='DS_monthCol <%# GetStatusClassName(Item, 9) %>'> 
    <asp:HyperLink ID="HyperLink9" runat="server"></asp:HyperLink> 
</div> 
<div class='DS_monthCol <%# GetStatusClassName(Item, 10) %>'> 
    <asp:HyperLink ID="HyperLink10" runat="server"></asp:HyperLink> 
</div> 
<div class='DS_monthCol <%# GetStatusClassName(Item, 11) %>'> 
    <asp:HyperLink ID="HyperLink11" runat="server"></asp:HyperLink> 
</div> 
<div class='DS_monthCol <%# GetStatusClassName(Item, 12) %>'> 
    <asp:HyperLink ID="HyperLink12" runat="server"></asp:HyperLink> 
</div> 

答えて

0

あなたにItemDataBoundイベントに

<ItemTemplate> 
<asp:PlaceHolder ID="ph" runat="server" /> 
</ItemTemplate> 



string GetStatusClassName(Object obj, int month) 
     { 
      //your existing function 
     } 

使用ItemDataBoundイベントを使用して試すことができます:

protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e) 
     { 
      if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
      { 

       //find place holder and add links in this place holder 
       PlaceHolder ph = (PlaceHolder)e.Item.FindControl("ph"); 

       //get your object of datasource assigned to repeater 
       Object dataItem = e.Item.DataItem;//need to add you items source 

       for (int month = 1; month <= 12; month++) 
       { 
        //create div as per your example else you can directly add links to panel and handled display with css    
        HtmlGenericControl div = new HtmlGenericControl("div"); 

        // set id, class to whatever you want 
        div.Attributes.Add("class", "DS_monthCol " + GetStatusClassName(dataItem, month)); 

        // declare a textbox 
        HyperLink lnk = new HyperLink(); 

        //add link in PlaceHolder   
        div.Controls.Add(lnk); 

        ph.Controls.Add(div); 
       } 


      } 
     } 

注:このコードはありますデータでテストされていません。

+0

感謝が、これは、データバインド式の構文 '<%# %>'内側 '<% %>に'とサーバー側のロジックなしで宣言されたローカル変数を使用することが可能かどうかはわからない、少し複雑になります – mihkov

関連する問題