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

我正确地注射了这个吗?

string myScriptName = "EventScriptBlock"; string myScript = string.Empty; //Verify script isn't already registered if (!ClientScript.IsClientScriptBlockRegistered(myScriptName)) { Response.Write('b'); myScript = "\n\n"; myScript += "alert('hi');"; myScript += "\n\n "; ClientScript.RegisterClientScriptBlock(this.GetType(), myScriptName, myScript); } 

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

您可以使用registerstartupscript而不是registerclientscriptblock!

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

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

registerstartupscript和registerclientscriptblock之间的区别

 protected void Page_Load(object sender, System.EventArgs e) { string myScript = "\n"; Page.ClientScript.RegisterStartupScript(this.GetType(), "myKey", myScript, false); } 

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

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

 
....

RegisterStartupScriptRegisterClientScriptBlock都可以工作。

问题在于myScript(字符串变量)。在myScript变量中,您只需要使用警报变量,因为每当您使用它时,脚本标记将在运行时自动添加到页面的HTML中。 要在您的页面上进行检查,请查看页面的来源。

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

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

您应该使用RegisterStartupScript 。