1

问题详细信息:无法使用更新面板从代码隐藏触发JavaScript方法

将数据保存到数据库后,我需要向用户显示警报。 为此,我有从代码隐藏注册脚本。 但它是不与更新面板一起工作,而它按预期工作而没有更新面板。 我需要使它适用于更新面板。

我试着在注册脚本时加入$(document).ready(function(),但没有奏效。

然后,我用ScriptManager.RegisterClientScriptBlock()方法而不是Page.ClientScript.RegisterStartupScript(),但它也没有工作。

这里是网页的代码段(C++):

<body> 
    <form id="form1" runat="server"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 
     <asp:Button ID="btnOutsideUpdatePanel" runat="server" Text="Outside UpdatePanel" OnClick="btnOutsideUpdatePanel_Click" /> 
     <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
      <ContentTemplate> 
       <asp:Button ID="btnInsideUpdatePanel" runat="server" Text="Inside UpdatePanel" OnClick="btnInsideUpdatePanel_Click" /> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
     <uc1:Child runat="server" id="Child1" /> 
     <asp:UpdatePanel ID="UpdatePanel2" runat="server"> 
      <ContentTemplate> 
       <uc1:Child runat="server" id="Child2" /> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
    </form> 
</body> 

这里是用户控件(ASCX)的代码片断:网页的

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Child.ascx.cs" Inherits="UpdatePanelAndScript.Child" %> 
<asp:Button ID="btnUserControl" runat="server" Text="User Control" OnClick="btnUserControl_Click" /> 

代码隐藏:用户控制的

protected void btnOutsideUpdatePanel_Click(object sender, EventArgs e) 
{ 
    Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowSuccess", "alert('Hi');", true); 
} 

protected void btnInsideUpdatePanel_Click(object sender, EventArgs e) 
{ 
    Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowSuccess", "alert('Hi');", true); 
} 

代码隐藏:

protected void btnUserControl_Click(object sender, EventArgs e) 
{ 
    Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowSuccess", "alert('Hi');", true); 
} 

回答

1

你只需要修改下面的语句:

Page.ClientScript.RegisterStartupScript 
(
    this.GetType(), 
    "ShowSuccess", 
    "alert('Hi');", 
    true 
); 

要:

ScriptManager.RegisterStartupScript 
(
    this, 
    this.GetType(), 
    "ShowSuccess", 
    "alert('Hi');", 
    true 
); 

参考:

注册局部页面更新兼容脚本
[...]如果你是渲染UpdatePanel控件内使用脚本,请确保您调用ScriptManager控件的方法。

+0

是的,它在上面的代码片段中工作。 感谢 但是,预期它不工作实际的代码库整合之后(这是工作的一部分).. 问题描述: 我有更新面板内的AJAX文件上传控制。 案例1: 当我添加update-panel属性“updateMode ='conditional'”时,弹出按预期工作。 但是,在更新面板之外保留的控件在部分回发后不会呈现。 案例2: 我删除了更新面板属性“updateMode ='conditional'”,弹出窗口根本不起作用 即脚本没有在DOM中获得注册。 –

+0

_“但是在更新面板外部保存的控件在部分回发后不会得到渲染”_。您的控件是否动态生成?你能提供必要的代码来重现你的问题吗? – krlzlx