2016-04-26 104 views
1

我正在嘗試查找連接到母版頁的網頁上的控件。控件本身位於內容頁面上,這應該是一件簡單的事情,但是無論我使用什麼方法,每次都會返回null。無法在頁面母版頁上找到控件

在這兩行其崩潰和說該參數不能爲空

文本框txtSubjectNotes =(文本框)item.FindControl( 「txtSubjectNotes」);

TextBox txtMultiNotes =(TextBox)item.FindControl(「txtMultiNotes」);

而我在它下面標記爲這兩個控件,而我正在試圖訪問

<telerik:RadTextBox ID="txtSubjectNotes" Width="200px" runat="server"></telerik:RadTextBox>             
<telerik:RadTextBox ID="txtMultiNotes" TextMode="MultiLine" Rows="10" Columns="10" Width="200px" runat="server"></telerik:RadTextBox> 

任何幫助在能夠asolve這將是偉大的,不,這不是具體到Telerik控制這是能夠在頁面上找到控件的標準.net代碼。

<telerik:RadAjaxPanel ID="rpNotes" runat="server" LoadingPanelID="RadAjaxLoadingPanel1" > 

          <telerik:RadGrid ID="rgNotes" runat="server" GroupPanelPosition="Top" OnItemCommand="rgNotes_ItemCommand" > 
           <GroupingSettings CollapseAllTooltip="Collapse all groups"></GroupingSettings> 
           <MasterTableView NoDetailRecordsText="No notes for this Appointment" AutoGenerateColumns="False" DataKeyNames="notes_id" CommandItemDisplay="Top" CommandItemSettings-AddNewRecordText="Add Notes" AllowAutomaticInserts="true" EditMode="PopUp"> 
            <Columns> 
             <telerik:GridEditCommandColumn UniqueName="EditCommandColumn"> 
             </telerik:GridEditCommandColumn> 
             <telerik:GridBoundColumn DataField="notes_id" FilterControlAltText="Filter notes_id column" HeaderText="notes_id" ReadOnly="True" SortExpression="notes_id" Visible="true" UniqueName="notes_id"> 
             </telerik:GridBoundColumn> 
             <telerik:GridBoundColumn DataField="Subject" FilterControlAltText="Filter Subject column" HeaderText="Subject" ReadOnly="True" SortExpression="Subject" UniqueName="Subject"> 
             </telerik:GridBoundColumn> 
            </Columns> 

            <EditFormSettings EditFormType="Template" InsertCaption="Add new Note" CaptionFormatString="Please enter or update note"> 
             <FormTemplate> 

              <telerik:RadTextBox ID="txtNotesId" Visible="false" Width="200px" runat="server"></telerik:RadTextBox> 

              Subject 
              <p> 
               <telerik:RadTextBox ID="txtSubjectNotes" Width="200px" runat="server"></telerik:RadTextBox> 
              </p> 
              <p> 
               Notes<br /> 
               <telerik:RadTextBox ID="txtMultiNotes" TextMode="MultiLine" Rows="10" Columns="10" Width="200px" runat="server"></telerik:RadTextBox> 
              </p> 

              <telerik:RadButton ID="rdSaveNotes" OnClick="rdSaveNotes_Click" Skin="Bootstrap" BackColor="#512479" ForeColor="White" runat="server" Text="Save Notes"></telerik:RadButton> 
              <telerik:RadButton ID="rdCancel" OnClick="rdCancel_Click1" CommandName="Cancel" Skin="Bootstrap" BackColor="#512479" ForeColor="White" runat="server" Text="Cancel"></telerik:RadButton> 
             </FormTemplate> 
            </EditFormSettings> 
           </MasterTableView> 
           <ClientSettings> 
            <ClientEvents OnPopUpShowing="PopUpShowing" /> 
            <Selecting AllowRowSelect="true" /> 
           </ClientSettings> 
          </telerik:RadGrid> 
         </telerik:RadAjaxPanel> 

protected void rdSaveNotes_Click(object sender, EventArgs e) 
{ 
    try 
    { 
    int id = Convert.ToInt32(Request.QueryString["id"]); 
    tblApertureNetNote _note = new tblApertureNetNote(); 

    _note = _dal.GetNotesById(new Guid(notes_id),_myuser.UserId); 

    _note.appointment_id = id; 
    _note.authUserId = _myuser.UserId; 
    _note.isActive = true; 
    _note.isDeleted = false; 

    var editFormItems = rgNotes.MasterTableView.GetItems(GridItemType.EditFormItem); 

    foreach (GridEditFormItem item in editFormItems) 
    { 
     if (!item.IsInEditMode) 
     { 
      continue; 
     } 

     TextBox txtSubjectNotes = (TextBox)item.FindControl("txtSubjectNotes"); 
     TextBox txtMultiNotes = (TextBox)item.FindControl("txtMultiNotes"); 
     //add custom logic here 


     _note.note = txtMultiNotes.Text; 


     _note.subject = txtSubjectNotes.Text; 

    } 
    if (_note.EntityState == System.Data.EntityState.Detached) 
     _dal.Addnotes(_note); 

    rgNotes.DataBind(); 
} 
catch (Exception ex) 
{ 
    logger.Error("Error in rdSaveNotes_Click function calandar edit.aspx" + ex.ToString()); 
} 
} 

感謝下面的評論由mig。這個方法我試過和它發現它,但它蒙上一個人如何實習生強制轉換成文本框中鍵入它作爲控制這是contorl被即時試圖找到這個應該是什麼難

public static Control FindControlRecursive(this Control control, string id) 
{ 
    if (control == null) return null; 
    //try to find the control at the current level 
    Control ctrl = control.FindControl(id); 

    if (ctrl == null) 
    { 
     //search the children 
     foreach (Control child in control.Controls) 
     { 
      ctrl = FindControlRecursive(child, id); 

      if (ctrl != null) break; 
     } 
    } 
    return ctrl; 
} 

即怎麼辦我投這行到一個文本框?

Control ctrl = this.FindControlRecursive("my_control_id"); 

編輯2

行,所以我都試過,但現在我得到

{ 「未將對象引用設置到對象的實例。」}

RadTextBox ctrl = (RadTextBox)this.FindControlRecursive("txtSubjectNotes"); 
       RadTextBox myControl; 
       if (ctrl is RadTextBox) 
       { 
        myControl = (RadTextBox)this.FindControlRecursive("txtSubjectNotes"); 


        // _note.note = txtMultiNotes.Text; 


        _note.subject = myControl.Text; 
       } 
+0

感謝您的投票上有傢伙 – rogue39nin

+0

我認爲你需要使用遞歸查找。 http://stackoverflow.com/questions/4955769/better-way-to-find-control-in-asp-net – mlg

+0

@mig謝謝你的工作,但看看我的新意見上面,請看看你是否可以回答這個問題給你的榮譽 – rogue39nin

回答

0

使用遞歸控制查找查找cont rol Recursive control lookup 要麼你可以做直接演員。
Control ctrl = (TextBox)this.FindControlRecursive("my_control_id");

或者您可以在檢查控件類型後進行強制轉換。

TextBox myControl; 
If(ctrl is TextBox) 
    myControl = (TextBox)this.FindControlRecursive("my_control_id"); 
+0

當我嘗試RadTextBox myControl =(RadTextBox)this.FindControlRecursive(「txtSubjectNotes」); 我得到的錯誤 錯誤\t CS1023 \t嵌入式聲明不能是聲明或標記語句\t ApertureNet \t C:\ Projects \ calendar \ ApertureNet \ ApertureNet \ Account \ modules \ calendar \ edit.aspx。cs 有效 – rogue39nin

+0

@mig仍然是相同的errror dam爲什麼這很難像 – rogue39nin

+0

@mig得到這仍然在此值不能爲空。 參數名稱:g是找到控制方法的原因 – rogue39nin

相關問題