2012-05-10 32 views
0

我在用戶控件表單上包含一個字段'x',它包含在aspx頁面和使用SharePoint母版頁的頁面中。我試圖找到我的代碼中aspx頁上的字段x,但它引發「Object ref not set」錯誤。我試過以下,但沒有工作,查找用戶控件表單上的字段

((TextBox)Page.Master.FindControl("PlaceHolderMain").FindControl("Experience").FindControl("x")).Text 


((TextBox)this.FindControl("x")).Text 


((TextBox)Page.Master.FindControl("PlaceHolderMain").FindControl("x")).Text 

我可以找到在網頁源領域,

<input name="ctl00$PlaceHolderMain$ctl00$x" type="text" value="3" id="ctl00_PlaceHolderMain_ctl00_x" class="textbox" /> 

更新: -

以前我是將用戶控制程序的負載事件的aspx頁面,

UserControl uc = (UserControl)Page.LoadControl("Experience.ascx"); 
experineceForm.Controls.Add(uc); 

但是通過查看網頁源我不得不懷疑,並認爲使用下面的代碼,將其添加在設計時,

<%@ Register TagPrefix="uc" TagName="Experience" Src="Experience.ascx" %> 

<div id="experineceForm" runat="server"> 
    <uc:experience id="idExperienceForm" runat="server"/> 
</div> 

這樣做後,我能找到控制與下面的代碼,

((TextBox)Page.Master.FindControl("PlaceHolderMain").FindControl("idExperienceForm").FindControl("txtEmployeeComments")).Text 
+0

@Rishi ....你什麼時候看到你做的(TextBox)Page.Master.FindControl(「PlaceHolderMain」)?這是否產生控制對象? – MikeTWebb

+0

@MikeTWebb,我在哪裏可以看到?我正在網頁上測試這個。 – Rishi

回答

0

嘗試使用此功能(下面)對ID進行遞歸搜索。最有可能的是System.NullReferenceException:未將對象引用設置爲對象的實例錯誤是因爲腳本未找到文本框,所以控件沒有.Text屬性。 NB:根將是一個asp.net佔位符對象或一個asp.net面板等的id,它包含您正在查找的文本框。在嘗試使用控件之前,您應該測試空返回值。

public Control FindControlRecursive(Control root, string id) 
{ 
    if (root.ID == id) { 
     return root; 
    } 
    Control c = default(Control); 
    foreach (c in root.Controls) { 
     Control t = FindControlRecursive(c, id); 
     if ((t != null)) { 
      return t; 
     } 
    } 
    return null; 
} 
0

據我所知,((TextBox)Page.Master.FindControl("x")).Text應該可以工作

+0

謝謝rt2800,但同樣的錯誤, ** System.NullReferenceException:對象引用不設置爲一個對象的一個​​實例** – Rishi

+0

字段其aspx頁面上直接可使用以下來訪問, **回覆於(((文本框)Page.Master.FindControl( 「PlaceHolderMain」)的FindControl( 「txtTrainingNeeds」))的文本。); ** – Rishi