RegisterClientScriptBlock的问题

时间:2009-12-14 13:25:59

标签: registerclientscriptblock

我必须通过我的一个方法运行以下javascript。但它没有运行 代码有什么问题。

private void fillGrid1()
{
        GridView1.DataSource = myDocCenter.GetDsWaitingForMe(Session["UserID"].ToString());
        HiddenField1.Value = { myDocCenter.GetDsWaitingForMe(Session["UserID"].ToString()).Tables[0].Rows.Count).ToString();
        GridView1.DataBind();

        String csname1 = "PopupScript1";
        String csname2 = "ButtonClickScript1";
        Type cstype = this.GetType();

        // Get a ClientScriptManager reference from the Page class.
        ClientScriptManager cs = Page.ClientScript;


        // Check to see if the client script is already registered.
        if (!cs.IsClientScriptBlockRegistered(cstype, csname2))
        {
            StringBuilder cstext2 = new StringBuilder();
            cstext2.Append("<script type=\"text/javascript\"> ");

            // You can  add JavaScript by using "cstext2.Append()".

            cstext2.Append("var count = document.getElementById('ctl00_ContentPlaceHolder1_HiddenField2');");
            cstext2.Append("var count = '100';");
            cstext2.Append("document.getElementById('sp2').innerHTML = count;");
            cstext2.Append("script>");

            cs.RegisterClientScriptBlock(cstype, csname2, cstext2.ToString(), false);
        }
}

4 个答案:

答案 0 :(得分:1)

您的脚本代码未正确关闭。

更改

cstext2.Append("script>");

cstext2.Append("</script>");

答案 1 :(得分:0)

除了adamantium所说的,你的JS看起来有点奇怪。你似乎声明并设置了两次count变量 - 你的意思是这样做。

接下来,最好的办法是,渲染页面然后查看源代码。你的JS被渲染到页面?试着在那里贴一个警报......它在开火吗?

答案 2 :(得分:0)

>   cstext2.Append("var count =
> document.getElementById('ctl00_ContentPlaceHolder1_HiddenField2');");

我会在这里使用ClientID属性。 HiddenField2.ClientID

答案 3 :(得分:0)

RegisterClientScriptBlock在<form>标记打开后发出脚本。浏览器在打开标签之后执行此脚本,但此时尚未处理引用的元素 - 浏览器无法找到它们。

RegisterStartupScript方法在<form>标记结束之前发出脚本。几乎所有的页面元素都由浏览器在这个地方处理,getElementById可以找到一些东西。

有关详细信息,请参阅http://jakub-linhart.blogspot.com/2012/03/script-registration-labyrinth-in-aspnet.html