首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >RegisterStartupScript和RegisterClientScriptBlock的区别是什么?

RegisterStartupScript和RegisterClientScriptBlock的区别是什么?
EN

Stack Overflow用户
提问于 2009-03-20 15:00:24
回答 1查看 190.4K关注 0票数 145

RegisterStartupScriptRegisterClientScriptBlock之间唯一的区别是,RegisterStartupScript将javascript放在页面的结束</form>标记之前,而RegisterClientScriptBlock将其放在页面的开始<form>标记之后?

另外,什么时候你会选择一个而不是另一个?我写了一个快速的样例页面,在那里我有一个问题,我不确定它发生的确切原因。

下面是aspx标记:

代码语言:javascript
复制
<html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <asp:Label ID="lblDisplayDate" runat="server"
                           Text="Label" /><br />
                <asp:Button ID="btnPostback" runat="server" 
                            Text="Register Startup Script"
                            onclick="btnPostback_Click" /><br />
                <asp:Button ID="btnPostBack2" runat="server" 
                            Text="Register"
                            onclick="btnPostBack2_Click" />
            </div>
        </form>
    </body>
</html>

下面是后面的代码:

代码语言:javascript
复制
protected void Page_Load(object sender, EventArgs e)
{
    lblDisplayDate.Text = DateTime.Now.ToString("T");
}

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

    if(!ClientScript.IsStartupScriptRegistered("JSScript"))
    {
        ClientScript.RegisterStartupScript(this.GetType(),"JSScript",
        sb.ToString());
    }
}

protected void btnPostBack2_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>");

    if (!ClientScript.IsClientScriptBlockRegistered("JSScriptBlock"))
    {
        ClientScript.RegisterClientScriptBlock(this.GetType(), "JSScriptBlock",  
        sb.ToString());
    } 
 }

问题是,当我单击btnPostBack按钮时,它会执行回发并将标签更改为红色,但当我单击btnPostBack2时,它会执行回发,但标签颜色不会更改为红色。为什么会这样呢?是不是因为标签没有初始化?

我还读到,如果你使用UpdatePanel,你需要使用ScriptManager.RegisterStartupScript,但如果我有MasterPage,我会使用ScriptManagerProxy

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/666519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档