gpt4 book ai didi

c# - 无法让嵌套在 UpdatePanel 中的 WebControl 中的 ScriptManager.RegisterStartupScript 工作

转载 作者:IT王子 更新时间:2023-10-29 04:06:03 25 4
gpt4 key购买 nike

我遇到了一个我认为应该是相当简单的问题,但就我的生活而言,我看不到我的问题。这个问题与 ScriptManager.RegisterStartupScript 有关,我以前用过很多次。

我遇到的情况是我有一个已插入到页面中的自定义 Web 控件。该控件(以及一两个其他控件)嵌套在 UpdatePanel 中。它们被插入到页面上的 PlaceHolder 上:

<asp:UpdatePanel ID="pnlAjax" runat="server">
<ContentTemplate>
<asp:PlaceHolder ID="placeholder" runat="server">
</asp:PlaceHolder>
...

protected override void OnInit(EventArgs e){
placeholder.Controls.Add(Factory.CreateControl());
base.OnInit(e);
}

这是页面上唯一的更新面板。

该控件需要运行一些初始 javascript 才能正常工作。控件调用:

ScriptManager.RegisterStartupScript(this, GetType(), 
Guid.NewGuid().ToString(), script, true);

我也试过:

ScriptManager.RegisterStartupScript(Page, Page.GetType(), 
Guid.NewGuid().ToString(), script, true);

问题是脚本在页面首次显示时运行正确,但在部分回发后不会重新运行。我尝试了以下方法:

  1. 从 CreateChildControls 调用 RegisterStartupScript
  2. 从 OnLoad/OnPreRender 调用 RegisterStartupScript
  3. 对前两个参数使用不同的参数组合(在上面的示例中,Control 是 Page,Type 是 GetType(),但我已经尝试使用控件本身,等等)。
  4. 我尝试过使用持久的和新的 ID(但我认为这不会对任何一种方式产生重大影响)。
  5. 我使用了几个断点,因此验证了 Register 行被正确调用。

我唯一没有尝试过的是使用 UpdatePanel 本身作为控件和类型,因为我认为控件不应该知道更新面板(而且在任何情况下似乎都没有一个好的方法获取更新面板?)。

谁能看出我在上面做错了什么?

谢谢:)


好吧,回答上面的问题 - 它确实看起来好像占位符不知何故弄乱了 ScriptManager.RegisterStartupScript。

当我将控件从占位符中拉出并将其直接编码到页面上时,Register 脚本可以正常工作(我还将控件本身用作参数)。

ScriptManager.RegisterStartupScript(this, GetType(), Guid.NewGuid().ToString(), script, true);

谁能解释为什么注入(inject)控件到 PlaceHolder 会阻止 ScriptManager 正确注册脚本?我猜这可能与动态控件的生命周期有关,但(据我所知)如果上述过程有正确的过程,我将不胜感激。

最佳答案

我在用户控件中使用它时遇到问题(在页面中它运行良好); Button1 在 updatepanel 内,scriptmanagerusercontrol 上。

protected void Button1_Click(object sender, EventArgs e)  
{
string scriptstring = "alert('Welcome');";
ScriptManager.RegisterStartupScript(this, this.GetType(), "alertscript", scriptstring, true);
}

现在看来你必须小心前两个参数,它们需要引用你的页面,而不是你的控件

ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "alertscript", scriptstring, true);

关于c# - 无法让嵌套在 UpdatePanel 中的 WebControl 中的 ScriptManager.RegisterStartupScript 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/802506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com