ScriptManager.RegisterStartupScript未在updatepanel内第二次触发

时间:2014-03-11 05:17:05

标签: c# javascript asp.net ajax updatepanel

我的aspx页面

<span>
 <asp:UpdatePanel ID="upPlayBtn" runat="server" >
  <ContentTemplate>
   <asp:Button runat="server" id="btn" Text="Play" OnClick="btnPlay" />
  </ContentTemplate>
 </asp:UpdatePanel> 
</span>

<script type="text/javascript">

 function OpenPlayerWindow() {
     OpenPlayWindow("<%=PlayLink%>");
 }
 function OpenPlayerWindowForError() {
     alert("Please check after sometime. Thanks!")
 }

</script>

我的CS页面

protected void btnPlay(object sender, EventArgs e)
{
if(condition)
   ScriptManager.RegisterStartupScript(upPlayBtn, upPlayBtn.GetType(),"tabs", "OpenPlayerWindow();", true);
  }
 else
  {
   ScriptManager.RegisterStartupScript(upPlayBtn, upPlayBtn.GetType(), "tabs", "OpenPlayerWindowForError();", true);
  }
}

当我第一次单击“播放”按钮时,OpenPlayerWindow()或OpenPlayerWindowForError()会根据条件打开。如果我再次单击该按钮,则会调用“btnPlay”,但不会调用任何JS函数。

如果我刷新页面,它会再次完美。

3 个答案:

答案 0 :(得分:0)

<span>
<asp:UpdatePanel ID="upPlayBtn" runat="server" >
<ContentTemplate>
  <asp:Button runat="server" id="btn" Text="Play" OnClick="btnPlay" />

   <script type="text/javascript">
    function OpenPlayerWindow() {
     OpenPlayWindow("<%=PlayLink%>");
    }
    function OpenPlayerWindowForError() {
     alert("Please check after sometime. Thanks!")
    }
   </script>

</ContentTemplate>
</asp:UpdatePanel> 
</span>

答案 1 :(得分:0)

我无法在评论中编写此代码,因此我将此作为答案。以下是我和我的代码。 请将其复制粘贴到单独的项目中,然后尝试使用。

此外,如果我没有正确复制此问题(未正确编写代码),请发表评论。

如果您的代码没问题,并且它是否适用于单独的项目,则可能在您的问题中未显示的某些其他代码中存在问题。

<强> ASPX

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="Practice_Web.WebForm2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" EnablePageMethods="true" runat="server">
    </asp:ScriptManager>
    <div>
        <span>
            <asp:UpdatePanel ID="upPlayBtn" runat="server">
                <ContentTemplate>
                    <asp:Button runat="server" ID="btn" Text="Play" OnClick="btnPlay" />
                </ContentTemplate>
            </asp:UpdatePanel>
        </span>
        <%--It works if I keep the script here also--%>
    </div>
    </form>
</body>
<script type="text/javascript">

    function OpenPlayerWindow() {
        alert("Thanks!");
    }
    function OpenPlayerWindowForError() {
        alert("Please check after sometime. Thanks!");
    }
</script>
</html>

<强> aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Practice_Web
{
    public partial class WebForm2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //This is just to simulate the condition part of the original code
            if (Session["condition"] == null)
                Session["condition"] = false;
            else
                Session["condition"] = !Convert.ToBoolean(Session["condition"]);
        }

        protected void btnPlay(object sender, EventArgs e)
        {
            bool condition = Convert.ToBoolean(Session["condition"]);
            if (condition)
            {
                ScriptManager.RegisterStartupScript(upPlayBtn, upPlayBtn.GetType(), "tabs", "OpenPlayerWindow();", true);
            }
            else
            {
                ScriptManager.RegisterStartupScript(upPlayBtn, upPlayBtn.GetType(), "tabs", "OpenPlayerWindowForError();", true);
            }
        }
    }
}

答案 2 :(得分:0)

尝试以下代码

protected void btnPlay(object sender, EventArgs e)
{
if(condition)
   ScriptManager.RegisterStartupScript(this, GetType(),"tabs", "OpenPlayerWindow();", true);
  }
 else
  {
   ScriptManager.RegisterStartupScript(this, GetType(), "tabs", "OpenPlayerWindowForError();", true);
  }
}