C# 如何为重复项设置不同的可见性属性

C# 如何为重复项设置不同的可见性属性,c#,asp.net,C#,Asp.net,我有一个带有转发器的用户自定义控件,转发器有一个日历和一个按钮,可以为每个重复的日历切换可见性 <asp:Repeater ID="DateRepeater" runat="server" DataSourceID="DateSource" OnItemCommand="DateRepeater_ItemCommand" OnPreRender="DateRepeater_PreRender"> <ItemTemplate>

我有一个带有转发器的用户自定义控件,转发器有一个日历和一个按钮,可以为每个重复的日历切换可见性

    <asp:Repeater ID="DateRepeater" runat="server" 
          DataSourceID="DateSource" OnItemCommand="DateRepeater_ItemCommand" OnPreRender="DateRepeater_PreRender">
          <ItemTemplate>
 <tr>
        <td class="auto-style8">
            <asp:ImageButton ID="CalendarButtonRef" runat="server" ImageUrl="~/img/calendar.png" OnClick="ShowCalendar_Click" />
                <asp:Calendar ID = "RefCalendar" Width="176" runat="server" OnSelectionChanged="Calendar_SelChanged"></asp:Calendar>
        </td>
    </tr>
          </ItemTemplate>
          <FooterTemplate>
              </table>
          </FooterTemplate>
      </asp:Repeater>
我设法强制转换目标日历,并在跟踪中获取对象作为日历,但当我尝试获取可见性属性时,它表示对象引用未设置为对象的实例


我的代码中缺少什么

如果使用FindControl通过ID引用对象,那么函数就是这样工作的。我试图将该对象强制转换为日历,并将其用作变量,但它不是这样工作的

这是工作代码

    protected void ShowCalendar_Click(object sender, ImageClickEventArgs e)
{
    ImageButton btnSender = (ImageButton)sender;
    String TragetCalendarID = btnSender.UniqueID.Remove(19) + "RefCalendar";
    if (Page.IsPostBack)
    {
        foreach (RepeaterItem rpt in DateRepeater.Items)
        {
            if (rpt.FindControl("RefCalendar").UniqueID == TragetCalendarID)
            {
                if (rpt.FindControl("RefCalendar").Visible == false)
                {
                    rpt.FindControl("RefCalendar").Visible = true;
                }
                else
                {
                    rpt.FindControl("RefCalendar").Visible = false;
                }
            }
        }
    }
}

我建议您仔细检查代码,看看find控件部分是否真的找到了任何东西,因为它说的是Object Not Set。。看起来它什么也找不到,然后您试图将基本上什么都不设为visible=true。您在JQuery中实现该功能可行吗?
    protected void ShowCalendar_Click(object sender, ImageClickEventArgs e)
{
    ImageButton btnSender = (ImageButton)sender;
    String TragetCalendarID = btnSender.UniqueID.Remove(19) + "RefCalendar";
    if (Page.IsPostBack)
    {
        foreach (RepeaterItem rpt in DateRepeater.Items)
        {
            if (rpt.FindControl("RefCalendar").UniqueID == TragetCalendarID)
            {
                if (rpt.FindControl("RefCalendar").Visible == false)
                {
                    rpt.FindControl("RefCalendar").Visible = true;
                }
                else
                {
                    rpt.FindControl("RefCalendar").Visible = false;
                }
            }
        }
    }
}