我目前正在 SharePoint 环境中设置 AJAX 功能,以支持我使用 C# 创建的 Web 部件。我使用 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() 两次。当我单步执行代码时,它会执行有问题的每一行,然后返回第一行并重复。当它到达添加 ScriptManager 的倒数第二行时,它当然会引发异常,因为它试图使用相同的键向页面添加第二个 ScriptManager。也许这是我理解这个方法应该如何工作的错误,但我不明白为什么它被调用两次(或者无限递归,据我所知,如果没有抛出那个异常)。感谢任何人都可以给我的任何帮助。