2015-04-07 2 views
3

Я пытаюсь определить состояние кнопок в зависимости от соответствующего текстового поля. Имена те же, что и префиксы. Текстовые поля и кнопки расположены в таблице на странице.FindControl Returning Null

<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 
     { 
     } 
    } 

Однако, несмотря на то, что строка соответствует именам кнопок отлично, элемент управления возвращает значение null. Что можно сделать для решения этой проблемы?

+1

Вы прошли через него с помощью отладчика? – horHAY

+1

если вы выполняете 'object 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");

EDIT:

Как вы найти элемент управления в элементе управления вам нужно сделать выше.

+0

Это не поможет ... Он либо по-прежнему возвращает null, либо генерирует исключение. –

+0

Вам нужны речевые метки вокруг имени кнопки. Вы пытались запустить его через отладчик с точками разрыва? –

+0

Также есть кнопка на странице? –

0

Работа для me ...

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 
    { 
    } 
}