在用户控件窗体上查找字段



我在用户控件窗体上有一个字段"x",该字段包含在 aspx 页上,并且该页面使用 SharePoint 母版页。我正在尝试在我的代码中查找 aspx 页面上的字段 x,但它抛出"对象引用未设置"错误。我试过跟随,但没有任何效果,

((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

尝试使用此函数(如下)对 ID 进行递归搜索。最有可能的是 System.NullReferenceException: 对象引用未设置为对象错误的实例是因为脚本未找到文本框,因此控件没有 .Text 属性。注意:root 将是包含您要查找的文本框的 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;
}

AFAIK,((TextBox)Page.Master.FindControl("x")).Text应该可以工作

最新更新