【问题标题】:ASP web forms ASCX User control for loop in repeaterASP Web 表单 ASCX 用户控件用于中继器中的循环
【发布时间】:2018-02-20 17:42:54
【问题描述】:

我有一个带有每个月状态的模型的中继器。

所以我想在转发器中使用 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 的错误。

如果我像这样使用它:

&lt;%# GetStatusClassName(Item, month) %&gt;

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>

【问题讨论】:

    标签: asp.net for-loop syntax webforms user-controls


    【解决方案1】:

    您可以尝试使用 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);
                    }
    
    
                }
            }
    

    注意:此代码未经数据测试。

    【讨论】:

    • 谢谢,但这会有点复杂,我不知道是否可以使用内部数据绑定表达式语法 &lt;%# %&gt;&lt;% %&gt; 中声明的局部变量并且没有服务器端逻辑
    猜你喜欢
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多