programing

RegisterStartupScript가 ScriptManager의 Updatepanel에서 작동하지 않습니다.왜 그런 것일까요?

newstyles 2023. 8. 7. 22:25

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 이벤트에 경고 메시지가 표시되지 않습니다.

UpdatePanel을 사용할 때 클라이언트스크립트를 사용하여 JavaScript를 호출할 수 없습니다.사용해야 합니다.ScriptManager.RegisterStartupScript대신.

따라서 변경할 수 있습니다.

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

로.

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

포스트백을 수행하고 업데이트 패널을 사용할 때 스크립트를 등록하므로 ScriptManager 클래스를 사용해야 합니다.

MSDN: ScriptManager.RegisterStartupScript

스크립트 관리자.컨트롤이 UpdatePanel 내부에 있을 때 페이지에 클라이언트 스크립트를 추가하는 데 사용되는 시작스크립트 메서드를 등록합니다.

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>

레지스터 시작 스크립트 뒤에 있는 코드

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);

}

Detail : 비동기식 포스트백 RegisterStartupScript를 사용하여 JavaScript를 프로그래밍 방식으로 추가합니다.

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

조금 늦었을 텐데 여기서 해결책을 찾았어요. http://forums.asp.net/p/1117430/5483679.aspx/1

시스템을 사용해야 합니다.웹.UI.스크립트 관리자.페이지 대신 클라이언트스크립트 블록을 등록합니다.클라이언트 스크립트.시작 스크립트 등록

자신이 속한 클래스에서 페이지에 접근할 수 없는 경우.

Page page = HttpContext.Current.CurrentHandler as Page;
        

ScriptManager.RegisterStartupScript(page,page.GetType(), Guid.NewGuid().ToString(), yourScriptVariable, true);

위의 어떤 것도 저에게 효과가 없었습니다.됐어요.

ScriptManager.RegisterClientScriptBlock(TryCast(sender, Control), Me.[GetType](), "alert", message, True)

에서 찾았습니다.

https://www.aspsnippets.com/Articles/ClientScriptRegisterClientScriptBlock-and-ClientScriptRegisterStartupScript-not-working-in-AJAX-UpdatePanel-in-ASPNet.aspx

언급URL : https://stackoverflow.com/questions/11643578/registerstartupscript-doesnt-work-with-scriptmanager-updatepanel-why-is-that