在用户控件表单上查找字段

时间:2012-05-10 14:48:47

标签: c# asp.net .net

我在用户控件表单上有一个字段'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

2 个答案:

答案 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;
}
相关问题