我是否正确注射?
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错误。
答案 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。