从文件后面的 asp.net 代码中注入 Javascript
Posted
技术标签:
【中文标题】从文件后面的 asp.net 代码中注入 Javascript【英文标题】:Inject Javascript from asp.net code behind files 【发布时间】:2011-10-26 04:04:49 【问题描述】:我注射的正确吗?
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 错误。
【问题讨论】:
我已经在 Chrome、IE、Safari 和 Firefox 中尝试过这个,并且在所有这些中都有效。你用的是哪个浏览器? 【参考方案1】:您可以使用 registerstartupscript 代替 registerclientscriptblock!
注册启动脚本 当您使用 RegisterStartupScript 时,它将在页面中的所有元素之后呈现您的脚本(就在表单的结束标记之前)。这使脚本能够调用或引用页面元素,而不会在页面的 DOM 中找不到它们
注册客户端脚本块 当您使用 RegisterClientScriptBlock 时,脚本会在 Viewstate 标记之后呈现,但在任何页面元素之前。由于这是一个直接脚本(不是一个可以调用的函数,它会立即被浏览器执行。但是浏览器在这个阶段没有在页面的 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);
【讨论】:
你了解asp.net页面生命周期吗? 上面提供的代码sn-p有错误。函数RegisterStartupScript
生成它自己的<script>
标签,至少对我来说是这样。删除字符串 myScript
中的这些标签解决了这个问题。
同意 UW,对 RegisterStartupScript 的调用在最后一个参数中传递 true,该参数指示 .NET 添加脚本标记包装器。将其更改为 false 或删除代码中的脚本标记。但无论如何,答案对我有帮助
@StevenRyssaert 最后一个参数是选择是否生成脚本标签【参考方案2】:
我感觉这与您的 asp.net/html 标记有关。
您的 .aspx 文件中是否有类似的表单标签?
<form id="form1" runat="server">
....
</form>
【讨论】:
【参考方案3】:RegisterStartupScript 和 RegisterClientScriptBlock 都可以使用。
问题在于 myScript(字符串变量)。在 myScript 变量中,您只需要使用 alert 变量,因为无论何时使用它,脚本标签都会在运行时自动添加到页面的 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 将始终添加在页面的开头。
【讨论】:
【参考方案4】:你应该使用RegisterStartupScript。
【讨论】:
以上是关于从文件后面的 asp.net 代码中注入 Javascript的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ASP.NET 从后面的代码中添加一个额外的 css 类?