我在用户控件表单上有一个字段'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 :(得分:0)
AFAIK,((TextBox)Page.Master.FindControl("x")).Text
应该有效
答案 1 :(得分:0)
尝试使用此功能(如下)对ID进行递归搜索。很可能 System.NullReferenceException:对象引用未设置为对象的实例错误是因为脚本未找到文本框,因此控件没有.Text
属性。注意:root将是包含您要查找的文本框的asp.net占位符对象或asp.net面板等的id。您应该在尝试使用该控件之前测试null返回。
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;
}