【问题标题】:Unable to trigger JavaScript method from code-behind using Update Panel无法使用更新面板从代码隐藏触发 JavaScript 方法
【发布时间】:2017-10-17 11:06:13
【问题描述】:

问题详情:

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

我尝试在注册脚本时添加$(document).ready(function (),但没有成功。

然后,我尝试使用ScriptManager.RegisterClientScriptBlock() 方法而不是Page.ClientScript.RegisterStartupScript(),但它也不起作用。

这是网页(ASPX)的代码sn-p:

<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)的代码sn-p:

<%@ 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);
}

【问题讨论】:

    标签: asp.net user-controls updatepanel scriptmanager registerclientscriptblock


    【解决方案1】:

    您只需要更改以下语句:

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

    收件人:

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

    参考:

    注册部分页面更新兼容脚本
    [...] 如果您正在渲染脚本以在 UpdatePanel 控件中使用,请确保调用 ScriptManager 控件的方法。

    【讨论】:

    • 是的,它在上面的代码 sn-p 中工作。谢谢 但是,在将它集成到实际代码库中之后,它没有按预期工作(它部分工作).. 问题描述:我在更新面板中有一个 AJAX 文件上传器控件。案例 1:当我添加更新面板属性“updateMode='conditional'”时,弹出窗口按预期工作。但是保留在更新面板之外的控件在部分回发后不会得到渲染。案例 2:我删除了更新面板属性“updateMode='conditional'”,弹出窗口根本不起作用,即脚本没有在 DOM 中注册。
    • “但在更新面板之外的控件在部分回发后不会得到渲染”。您的控件是动态生成的吗?您能否提供重现问题所需的代码?
    猜你喜欢
    • 2018-07-28
    • 2011-06-15
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    相关资源
    最近更新 更多