2015-04-07 102 views
3

我试图根据相关的文本框来控制按钮状态。名称与前缀不同。文本框和按钮位于页面的表格中。FindControl返回空

<asp:Table ID="Table1" runat="server" CssClass="table"> 
      <asp:TableRow> 
       <asp:TableCell Width="15%"> 
        <asp:Label ID="lblRequestHeader" runat="server" Text="Requested" CssClass="bold text-center" 
         Width="90%"></asp:Label> 
       </asp:TableCell> 
       <asp:TableCell Width="15%"> 
        <asp:Label ID="lblApprovalHeader" runat="server" Text="Approval" CssClass="bold text-center" 
         Width="90%"></asp:Label> 
       </asp:TableCell> 
       <asp:TableCell Width="15%"> 
        <asp:Label ID="lblApprovalTimeHeader" runat="server" Text="Date/Time of Approval" 
         CssClass="bold text-center" Width="90%"></asp:Label> 
       </asp:TableCell> 
       <asp:TableCell Width="15%"> 
        <asp:Label ID="lblReadyHeader" runat="server" Text="Ready To Pick Up" CssClass="bold text-center" 
         Width="90%"></asp:Label> 
       </asp:TableCell> 
       <asp:TableCell Width="15%"> 
        <asp:Label ID="lblCollectedHeader" runat="server" Text="Collected By TestHouse" CssClass="bold text-center" 
         Width="90%"></asp:Label> 
       </asp:TableCell> 
       <asp:TableCell Width="15%"> 
        <asp:Label ID="lblDeliveredHeader" runat="server" Text="Delivered From TestHouse" 
         CssClass="bold text-center" Width="90%"></asp:Label> 
       </asp:TableCell> 
      </asp:TableRow> 
      <asp:TableRow> 
       <asp:TableCell Width="15%"> 
        <asp:TextBox ID="txtRequestTime" runat="server" Width="90%"> </asp:TextBox> 
       </asp:TableCell> 
       <asp:TableCell Width="15%"> 
        <asp:TextBox ID="txtApproval" runat="server" Width="90%"></asp:TextBox> 
       </asp:TableCell> 
       <asp:TableCell Width="15%"> 
        <asp:TextBox ID="txtApprovalTime" runat="server" Width="90%"></asp:TextBox> 
       </asp:TableCell> 
       <asp:TableCell Width="15%"> 
        <asp:TextBox ID="txtReadyTime" runat="server" Width="90%"></asp:TextBox> 
       </asp:TableCell> 
       <asp:TableCell Width="15%"> 
        <asp:TextBox ID="txtCollectedTime" runat="server" Width="90%"></asp:TextBox> 
       </asp:TableCell> 
       <asp:TableCell Width="15%"> 
        <asp:TextBox ID="txtDeliveredTime" runat="server" Width="90%"></asp:TextBox> 
       </asp:TableCell> 
      </asp:TableRow> 
      <asp:TableRow> 
       <asp:TableCell Width="15%"> 
       </asp:TableCell> 
       <asp:TableCell Width="15%"> 
       </asp:TableCell> 
       <asp:TableCell Width="15%"> 
       </asp:TableCell> 
       <asp:TableCell Width="15%"> 
        <asp:Button ID="btnReadyTime" runat="server" Text="Ready To Collect" Width="90%" /> 
       </asp:TableCell> 
       <asp:TableCell Width="15%"> 
        <asp:Button ID="btnCollectedTime" runat="server" Text="Collected" Width="90%" /> 
       </asp:TableCell> 
       <asp:TableCell Width="15%"> 
        <asp:Button ID="btnDeliveredTime" runat="server" Text="Delivered" Width="90%" /> 
       </asp:TableCell> 
      </asp:TableRow> 
     </asp:Table> 

文本框是由dataretrieval填充,并且按钮的状态,然后通过所调用的方法设置如下:

txtReadyTime.Text = slabdetails.ReadyTimestamp.ToString(); 
textboxenabled(txtReadyTime); 

此方法会修改文本名称的按钮名称,然后试图找到启用/禁用它的按钮。

public void textboxenabled(TextBox box) 
    { 
     string btnName = box.ID.Replace("txt", "btn"); 
     try 
     { 
      Button btn = FindControl(btnName) as Button; 
      if (box.Text == "") 
       btn.Enabled = true; 
      else 
       btn.Enabled = false; 
     } 
     catch 
     { 
     } 
    } 

但是,尽管字符串完美匹配按钮的名称,控件返回为空。 可以做些什么来解决这个问题?

+1

你有没有使用调试器通过它? – horHAY

+1

如果你做'对象obj = FindControl(btnName);',是否返回null? –

+0

搜索对象也返回null – nickson104

回答

9

感谢Matthew Watson,FindControl在使用母版页的项目中存在问题。为了在网页中找到能够控制,必须首先通过母版页深入和手动内容:

此:

Button btn = FindControl(btnName) as Button; 

一定的格式为:

Button btn = this.Master.FindControl("MainContent").FindControl(btnName) as Button; 
+0

如果您愿意,您可以将自己的答案标记为答案(它可以帮助其他人搜索类似问题的答案)。 –

0

尝试 Button btn =(Button)Table1.FindControl(“btnName”);

编辑:

当你发现你需要做上述控制内的控制。

+0

这将无济于事......它要么仍然返回null,要么会抛出异常。 –

+0

您需要按钮名称周围的语音标记。你有没有试过通过带断点的调试器来运行它? –

+0

此外,页面上的按钮在哪里? –

0

的工作我...

protected void Page_Load(object sender, EventArgs e) 
{ 

    // txtReadyTime.Text =""; //Button will be enabled 
    txtReadyTime.Text =DateTime.Now.ToShortTimeString(); //Button will be enabled 
    textboxenabled(txtReadyTime); 


    //Button btn = this.FindControl("btnReadyTime") as Button; 
    //Title = btn.Text; 
} 

public void textboxenabled(TextBox box) 
{ 
    string btnName = box.ID.Replace("txt", "btn"); 
    try 
    { 
     Button btn = FindControl(btnName) as Button; 
     if (box.Text == "") 
      btn.Enabled = true; 
     else 
      btn.Enabled = false; 
    } 
    catch 
    { 
    } 
}