RegisterClientScriptBlock

RegisterClientScriptBlock

我注入(inject)正确吗?

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错误。

最佳答案

您可以使用registerstartupscript而不是registerclientscriptblock!

RegisterStartupScript
使用RegisterStartupScript时,它将在页面中的所有元素之后(在表单的end标签之前)呈现脚本。这使脚本能够调用或引用页面元素,而不会在页面的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);
 }

关于c# - 从文件后面的asp.net代码注入(inject)Javascript,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7046565/

10-09 20:13