0

現在、C# で作成している Web パーツをサポートするために、SharePoint 環境で AJAX 機能をセットアップしている最中です。起動して実行するための出発点として Microsoft のウォークスルーを使用していますが、奇妙なエラーであると思われるエラーが発生しています。問題は CreateChildControls() で発生しています:

    protected override void CreateChildControls()
    {

        base.CreateChildControls();

        //Fix for the UpdatePanel postback behaviour.
        EnsurePanelFix();

        LinkButton sayHello = new LinkButton();
        UpdatePanel refreshName = new UpdatePanel();
        ScriptManager scriptHandler = new ScriptManager();
        displayName = new Label();
        inputName = new TextBox();

        //Set up control properties.
        this.displayName.ID = "displayName";
        this.displayName.Text = "Hello!";
        this.inputName.ID = "inputName";
        sayHello.ID = "sayHello";
        sayHello.Text = "Say Hello";
        scriptHandler.ID = "scriptHandler";
        refreshName.ID = "refreshName";
        refreshName.UpdateMode = UpdatePanelUpdateMode.Conditional;
        refreshName.ChildrenAsTriggers = true;

        //Add the EventHandler to the Button.
        sayHello.Click += new EventHandler(ClickHandler);

        //Add the user interface (UI) controls to the UpdatePanel.
        refreshName.ContentTemplateContainer.Controls.Add(this.inputName);
        refreshName.ContentTemplateContainer.Controls.Add(sayHello);
        refreshName.ContentTemplateContainer.Controls.Add(this.displayName);

        //The ScriptManager control must be added first.
        this.Controls.Add(scriptHandler);
        this.Controls.Add(refreshName);
    }

私が抱えている問題は、何らかの理由で CreateChildControls() を 2 回呼び出す必要があることです。コードをステップ実行すると、問題のあるすべての行が実行され、最初の行に戻って繰り返されます。ScriptManager を追加する最後から 2 番目の行に到達すると、同じキーで 2 番目の ScriptManager をページに追加しようとしているため、もちろん例外がスローされます。おそらく、このメソッドがどのように機能するかについての私の理解に誤りがありますが、なぜそれが2回呼び出されるのか理解できません(例外がスローされなかった場合、私が知っている限りでは、無限に再帰的に)。誰でも私に与えることができる助けをありがとう。

4

4 に答える 4

1

クラスレベルでプライベートフラグを追加できます- base.CreateChildControls() の後にチェックし、設定されている場合は関数の残りをバイパスし、scriptHandlerが追加されたときに設定し、デバッグで監視して無限ではないことを確認しますループ。

コール スタックも確認してください。CreateChildControls() はさまざまな場所から呼び出されている可能性があります。

余談ですが、Microsoft SharePoint Designer を試してみましたか? VS 2005 で Ajax を使用して SharePoint の Web コントロールの開発を開始しましたが、代わりに SharePoint Designer を使用してほとんどのことができることがわかりました。

于 2009-12-16T15:05:41.357 に答える
0

私はこの問題を抱えていたので、CreateChildControls の最後で Control.ChildControlCreated フラグを true に設定して修正しました。これは基本的に Tom Brown の回答と同じですが、組み込まれています。

ここで詳細を読むことができます: http://msdn.microsoft.com/en-us/library/system.web.ui.control.childcontrolscreated.aspx

于 2012-03-08T22:54:08.887 に答える
0

CreateChildControlsコードで呼び出していないことを確認してください。EnsureChildControls代わりに使用してください。

于 2009-12-16T14:59:52.620 に答える