web-dev-qa-db-ja.com

RegisterStartupScriptは、ScriptManager、Updatepanelでは機能しません。何故ですか?

protected void timer1_Tick(object sender, EventArgs e)
    {
        foreach (RepeaterItem item in rpChat.Items)
        {
            TextBox txt = item.FindControl("txtChatMessage") as TextBox;
            if (txt != null)
            {
                message[i] = txt.Text;
                i--;
            }
        }
        lblStatusChat.Text = "";
        RepeaterBind();
        string javaScript = "<script language=JavaScript>\n" + "alert('Button1_Click client-side');\n" + "</script>";

        Page.ClientScript.RegisterStartupScript(this.GetType(), "myKey", javaScript);
    }

timer_clickトリガーと更新パネル。また、timer_tickイベントでアラートメッセージが表示されない

40
sly_Chandan

更新パネルを使用すると、上記のようなjavascriptを呼び出すことはできません。使用する必要があります

ScriptManager.RegisterStartupScript

だからあなたを変える

Page.ClientScript.RegisterStartupScript(this.GetType(), "myKey", javaScript);

ScriptManager.RegisterStartupScript(updatePanelId,updatePanelId.GetType()
                                                      , "alert", javaScript, true);
104
Akash KC

ポストバックを実行し、updatepanelを使用するときにスクリプトを登録するため、ScriptManagerクラスを使用する必要があります。

MSDN: ScriptManager.RegisterStartupScript

コントロールがUpdatePanel内にラップされるときに、クライアントスクリプトをページに追加するために使用されるScriptManager.RegisterStartupScriptメソッド。

ASPXページ

<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:Label ID="lblDisplayDate" runat="server" Text="Label"></asp:Label>
         <asp:Button ID="btnPostback" runat="server" onclick="btnPostback_Click" 
        Text="ClickMe" />
    </ContentTemplate>
</asp:UpdatePanel>
</div>

CodeBehind Register起動スクリプト

protected void btnPostback_Click(object sender, EventArgs e)
{
    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    sb.Append(@"<script language='javascript'>");
    sb.Append(@"var lbl = document.getElementById('lblDisplayDate');");
    sb.Append(@"lbl.style.color='red';");
    sb.Append(@"</script>");

    ScriptManager.RegisterStartupScript(btnPostback,this.GetType(), "JSCR", sb.ToString(),false);

}

詳細: 非同期ポストバック中にRegisterStartupScriptを使用してプログラムでJavaScriptを追加

9
Pranay Rana

私の場合、ScriptManager.RegisterStartupScriptも機能しませんでした。

うまくいかない:

ScriptManager.RegisterStartupScript(Me, 
  Me.GetType(), 
  String.Format("Data{0}", Me.ID), 
  "<script>alert(111);</script>", 
  False)

作業:

ScriptManager.RegisterStartupScript(Me.Page, 
  Me.GetType(), 
  String.Format("Data{0}", Me.ID), 
  "<script>alert(111);</script>", 
  False)

例のMeは、System.Web.UI.WebControls.WebParts.WebPartから継承したカスタムコントロールです

7
feeeper

少し遅れているはずですが、ここで解決策を見つけました http://forums.asp.net/p/1117430/5483679.aspx/1

Page.ClientScript.RegisterStartupScriptの代わりにSystem.Web.UI.ScriptManager.RegisterClientScriptBlockを使用する必要があります。

2
Kaly

このようにするとうまくいきます

Private Sub test()
        ScriptManager.RegisterStartupScript(Me.Page, Me.GetType(), "k1", "alert('hello')", True)
    End Sub

しかし、 SweerAlert を追加すると機能しません

Private Sub test()
            ScriptManager.RegisterStartupScript(Me.Page, Me.GetType(), "k1", "swal('Please Provide All Valid Message Information!')", True)
        End Sub

なぜ機能しないのか、ご存知ですか?.

0
SMHasnain