我是第一次创建自定义控件,我需要一些javascript作为控件的初始化运行。我发现在回发时执行ScriptManager.RegisterStartupScript的唯一方法是将它绑定到UpdatePanel。我在自定义控件中添加了一个更新面板,它将在初始页面加载和一次回发时执行javascript,但之后再也不会。我已经将问题缩小到更新面板在第一次回发后停止渲染到页面的事实。除了更新面板之外,控件中的其他所有内容都会正确呈现,而更新面板只会消失。通过这种精简控制可以看出问题。
public class SimpleTest : DataBoundControl
{
private UpdatePanel _updatePanel;
protected override void CreateChildControls()
{
_updatePanel = new UpdatePanel();
_updatePanel.ID = "testScriptUpdate";
_updatePanel.UpdateMode = UpdatePanelUpdateMode.Always;
Controls.Add(_updatePanel);
}
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
_updatePanel.RenderControl(writer);
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
EnsureChildControls();
}
}
我用来做回发的按钮很简单
<button type="button" onclick="__doPostBack('','');" >PostBack</button>
如果您检查页面,更新面板将在第一次出现,但在点击按钮后,将不再显示。我觉得我必须错过一些设置来完成这项工作,但经过几个小时的摆弄,我需要寻求帮助。