为什么FindControl找不到我的中继器页脚中的按钮?

Rya*_*yan 5 vb.net asp.net repeater

我正在使用OnItemDataBound事件尝试激活转发器中的禁用按钮.很简单,如果事件被触发,我知道转发器中有项目,因此想要启用该按钮.我遇到的问题是在函数中强制转换按钮,因此我可以启用它.转发器代码的相关部分如下:

<asp:Repeater ID="RptEnterHours" runat="server" DataSourceID="SQL_EmployeeGetTimesheet" ClientIDMode="Predictable" OnItemDataBound="RptEnterHours_Bound">
     '.....Irrelevant code.....
     <FooterTemplate>
          <asp:Button Enabled="false" ID="SubmitTimesheets" Text="Submit All Timesheets" OnClick="processTimesheetEntry" runat="server" OnClientClick="checkValues();" />&nbsp;
     </FooterTemplate>
</asp:Repeater>
Run Code Online (Sandbox Code Playgroud)

这是我的代码背后:

Sub RptEnterHours_Bound(Sender As Object, e As RepeaterItemEventArgs)

    'Exposes the Submit All Timesheets button if timesheets are available.
    If (e.Item.ItemType = ListItemType.Item) Or _
        (e.Item.ItemType = ListItemType.AlternatingItem) Then
        Dim sButton As Button = TryCast(Me.FindControl("SubmitTimesheets"), Button)
        sButton.Enabled = True
    End If

End Sub
Run Code Online (Sandbox Code Playgroud)

这个和所有其他尝试产生了可怕的"对象引用未设置为对象的实例"消息.任何人都可以告诉我我做错了什么以及为什么我的代码背后找不到按钮?

小智 3

请尝试一下,我相信它会对您有所帮助。

    If e.Item.ItemType = ListItemType.Footer Then
        Dim btn as new button
        btn = CType(e.Item.FindControl("SubmitTimesheets"), Button)
        btn.enabled = true
    End If
Run Code Online (Sandbox Code Playgroud)