2017-09-12 6 views
0

각 달에 대한 상태가있는 모델이있는 리피터가 있습니다.ASP 웹 양식 ASCX 반복기 루프 용 사용자 정의

그래서 나는 중계기 내부 루프를 사용하고자하지만, 문제는 하나의 변수에 액세스 할 수없는 것입니다

코드 :

<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 이벤트를 사용하여 시도 할 수 있습니다

사용하여 ItemDataBound 이벤트로

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



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

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