从文件后面的asp.net代码中注入Javascript

时间:2011-08-12 21:35:26

标签: c# javascript asp.net

我是否正确注射?

string myScriptName = "EventScriptBlock";
string myScript = string.Empty;

//Verify script isn't already registered
if (!ClientScript.IsClientScriptBlockRegistered(myScriptName))
{
    Response.Write('b');
    myScript = "\n<script type=\"text/javascript\" language=\"Javascript\" id=\"EventScriptBlock\">\n";
    myScript += "alert('hi');";
    myScript += "\n\n </script>";

    ClientScript.RegisterClientScriptBlock(this.GetType(), myScriptName, myScript);
}

这是我的Page_Load,但我从未看过警报,也没有JavaScript错误。

4 个答案:

答案 0 :(得分:49)

您可以使用registerstartupscript而不是registerclientscriptblock!

<强>的RegisterStartupScript 当您使用RegisterStartupScript时,它将在页面中的所有元素之后(在表单的结束标记之前)呈现您的脚本。这使得脚本可以调用或引用页面元素,而不会在页面的DOM中找不到它们

<强>的RegisterClientScriptBlock 使用RegisterClientScriptBlock时,脚本将在Viewstate标记之后,但在任何页面元素之前呈现。由于这是一个直接脚本(不是可以调用的函数,它将立即由浏览器执行。但是浏览器在此阶段没有在Page的DOM中找到标签,因此您应该收到“未找到对象”错误

Difference between registerstartupscript and registerclientscriptblock

protected void Page_Load(object sender, System.EventArgs e)
 {
      string myScript = "\n<script type=\"text/javascript\" language=\"Javascript\" id=\"EventScriptBlock\">\n";
        myScript += "alert('hi');";
        myScript += "\n\n </script>";
     Page.ClientScript.RegisterStartupScript(this.GetType(), "myKey", myScript, false);
 }

答案 1 :(得分:5)

我觉得这与你的asp.net/html标记有关。

你的.aspx文件中是否有这样的表单标签?

<form id="form1" runat="server">
   ....
</form>

答案 2 :(得分:5)

RegisterStartupScript RegisterClientScriptBlock 都可以。

问题在于myScript(字符串变量)。在myScript变量中,您只需要使用警报变量,因为无论何时使用它,脚本标记都会在运行时自动添加到页面的HTML中。要在您的页面上检查此内容并查看页面来源。

protected void Page_Load(object sender, EventArgs e)
{
        string myScript = string.Empty;

        //myScript = "\n<script type=\"text/javascript\" language=\"Javascript\" id=\"EventScriptBlock\">\n";
        string registerKey = "alert('RegisterClientScriptBlock');";
        myScript = "alert('RegisterStartupScript');";
        Page.ClientScript.RegisterStartupScript(this.GetType(), "RegisterStartupScript", myScript, true);
        Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "RegisterClientScriptBlock", registerKey, true);
    }

注意我先执行 RegisterStartupScript ,然后执行 RegisterClientScriptBlock 。但最后会执行RegisterStartupScript警报,因为它将添加在页面的末尾。 RegisterClientScriptBlock将始终在页面的开头添加。

答案 3 :(得分:3)

您应该使用RegisterStartupScript