0

aspx ページと SharePoint マスター ページを使用するそのページに含まれるユーザー コントロール フォームにフィールド 'x' があります。コードで 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
4

2 に答える 2

0

AFAIK、((TextBox)Page.Master.FindControl("x")).Text動作するはずです

于 2012-05-10T14:53:23.750 に答える
0

この関数 (下記) を試して、ID の再帰的検索を実行してください。ほとんどの場合、System.NullReferenceException: Object reference not set to an instance of an objectエラーは、スクリプトがテキスト ボックスを見つけられなかったため、コントロールに.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;
}
于 2012-05-11T09:10:56.530 に答える