【问题标题】:Unable to Find the Control from codebehind, but able to find other controls无法从代码隐藏中找到控件,但能够找到其他控件
【发布时间】:2010-11-03 17:20:54
【问题描述】:

我能够找到所有这些标签和文本框的控件都接受 edateTB。这对我来说很奇怪,因为它与 sdateTB 的观点相同。那么,当我尝试对其使用 FindControl 并且 sdateTB 返回正确的控件时,为什么 edateTB 会返回 NULL?

在此先感谢,这让我沮丧了一段时间。

这是我收到此错误的代码隐藏。这里面有更多代码,但我只是想我会包含所有内容,直到出现 NULL 错误的部分。

 protected void ReservationDetail_DataBound(object sender, EventArgs e)
{


    TextBox idBox = (TextBox)dvReservationDetail.FindControl("tbID");
    int id = int.Parse(idBox.Text);
    Label specDays = (Label)dvReservationDetail.FindControl("DaysHdr");
    Label weekdays = (Label)dvReservationDetail.FindControl("WeekdaysHdr");
    ListBox dates = (ListBox)dvReservationDetail.FindControl("DatesList");
    Label days = (Label)dvReservationDetail.FindControl("WeekdaysLbl");
    Label sdate = (Label)dvReservationDetail.FindControl("startDateLbl");
    TextBox sdateTb= (TextBox)dvReservationDetail.FindControl("startDateTB");
    Label eDate = (Label)dvReservationDetail.FindControl("endDateLbl");
    TextBox edateTB = (TextBox)dvReservationDetail.FindControl("endDateTB");
}

这是标签和文本框所在的详细信息视图。

<asp:DetailsView ID="dvReservationDetail" runat="server" DataSourceID="SqlDetail"
                    OnDataBound="ReservationDetail_DataBound" CssClass="detailgrid" GridLines="None"
                    DefaultMode="Edit" AutoGenerateRows="false" Visible="false" Width="100%" OnItemUpdating="ReservationDetail_Updating">
                    <Fields>
                        <asp:TemplateField HeaderText="ID">
                            <EditItemTemplate>
                                <asp:TextBox ID="tbID" runat="server" Text='<%# Bind("id") %>' ReadOnly="true" />
                            </EditItemTemplate>
                        </asp:TemplateField>
                        <asp:BoundField HeaderText="LabName" DataField="labName" />
                        <asp:BoundField HeaderText="Class" DataField="class" />
                        <asp:BoundField HeaderText="Class Size" DataField="classSize" />
                        <asp:TemplateField HeaderText="Software">
                            <EditItemTemplate>
                                <asp:ListBox ID="software" Width="150" runat="server" ReadOnly="true" />
                            </EditItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Start Time">
                            <EditItemTemplate>
                                <asp:TextBox ID="startTime" runat="server" Text='<%# Bind("startTime") %>' />
                            </EditItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="End Time">
                            <EditItemTemplate>
                                <asp:TextBox ID="endTime" runat="server" Text='<%# Bind("endTime") %>' />
                            </EditItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField>
                            <HeaderTemplate>
                                <asp:Label ID="WeekdaysHdr" runat="server" Visible="false" Text="Days Reserved By Week"></asp:Label>
                                <asp:Label ID="DaysHdr" runat="server" Visible="false" Text="Specific Days Reserved"></asp:Label>
                            </HeaderTemplate>
                            <ItemTemplate>
                                <asp:ListBox ID="DatesList" runat="server" Visible="false"></asp:ListBox>
                                <asp:Label ID="WeekdaysLbl" runat="server" Text='<%# Bind("Weekday") %>' Visible="false"></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField>
                            <HeaderTemplate>
                                <asp:Label ID="startDateLbl" runat="server" Visible="false" Text="Start Date"></asp:Label></HeaderTemplate>
                            <ItemTemplate>
                                <asp:TextBox ID="startDateTB" runat="server" Visible="false" Text="Test"></asp:TextBox></ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField>
                            <HeaderTemplate>
                                <asp:Label ID="endDateLbl" runat="server" Visible="false" Text="End Date"></asp:Label></HeaderTemplate>
                            <ItemTemplate>
                                <asp:TextBox ID="endDateTB" runat="server" Visible="false" Text=""></asp:TextBox></ItemTemplate>
                            <ItemTemplate>
                                <asp:TextBox ID="repeatTypeTB" runat="server" Visible="false" Text='<%# Bind("repeats") %>'></asp:TextBox></ItemTemplate>
                        </asp:TemplateField>
                        <%-- <asp:CommandField ShowEditButton="true" />--%>
                    </Fields>
                </asp:DetailsView>

【问题讨论】:

  • this.dvReservationDetail?? “这个”对我来说看起来不同。我希望你会看到它。有什么目的吗?
  • this 隐含在引用 dsReservationDetail 的其他行中;删除它应该没有任何区别。
  • 哦,是的,我只是想把它放在那里看看能不能解决它。
  • 可能是 Visible False 和空文本?
  • startDateTB 也有 Visible="False" 并且在 endDateTB 中添加文本仍然使它返回 Null。我只是想弄清楚为什么 startDateTB 很好但 endDateTB 不是。

标签: c# asp.net findcontrol


【解决方案1】:

您的最后一个 TemplateField 标记中似乎有 2 个 ItemTemplate 标记。注意:

<asp:TemplateField> 
    <HeaderTemplate> 
        <asp:Label ID="endDateLbl" runat="server" Visible="false" Text="End Date"></asp:Label></HeaderTemplate> 
    <ItemTemplate> 
        <asp:TextBox ID="endDateTB" runat="server" Visible="false" Text=""></asp:TextBox></ItemTemplate> 
    <ItemTemplate> 
        <asp:TextBox ID="repeatTypeTB" runat="server" Visible="false" Text='<%# Bind("repeats") %>'></asp:TextBox></ItemTemplate> 
</asp:TemplateField> 

可能会忽略包含 endDateTB 的第一个。

应该是这样的:

<asp:TemplateField> 
    <HeaderTemplate> 
        <asp:Label ID="endDateLbl" runat="server" Visible="false" Text="End Date"></asp:Label></HeaderTemplate> 
    <ItemTemplate> 
        <asp:TextBox ID="endDateTB" runat="server" Visible="false" Text=""></asp:TextBox></ItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField> 
    <HeaderTemplate> 
        <asp:Label ID="repeatTypeLbl" runat="server" Visible="false" Text="Repeat"></asp:Label></HeaderTemplate> 
    <ItemTemplate> 
        <asp:TextBox ID="repeatTypeTB" runat="server" Visible="false" Text='<%# Bind("repeats") %>'></asp:TextBox></ItemTemplate> 
</asp:TemplateField> 

【讨论】:

  • 是的,就是这样。愚蠢的我。谢谢!
  • +1 来自我。当我的妻子叫我下来帮助喂养我们的小女儿时,我看到了这个并且正要发布相同的答案!
【解决方案2】:

所有其他行都是 (label)dvreservationdetail...

最后一行是 (label)this.dvreservationdetail...

【讨论】:

  • 没关系,就像迈克尔托德在 cmets 中所说的那样暗示。我只是把它放在那里看看它是否能解决它。
猜你喜欢
  • 2019-05-26
  • 2017-01-11
  • 2014-02-15
  • 1970-01-01
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 2019-11-09
  • 1970-01-01
相关资源
最近更新 更多