从文件后面的 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 生成它自己的&lt;script&gt; 标签,至少对我来说是这样。删除字符串 myScript 中的这些标签解决了这个问题。 同意 UW,对 RegisterStartupScript 的调用在最后一个参数中传递 true,该参数指示 .NET 添加脚本标记包装器。将其更改为 false 或删除代码中的脚本标记。但无论如何,答案对我有帮助 @StevenRyssaert 最后一个参数是选择是否生成脚本标签【参考方案2】:

我感觉这与您的 asp.net/html 标记有关。

您的 .aspx 文件中是否有类似的表单标签?

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

【讨论】:

【参考方案3】:

RegisterStartupScriptRegisterClientScriptBlock 都可以使用。

问题在于 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 类?

在 Asp.net 中从代码后面添加 Html

如何从后面的代码中隐藏和显示 asp.net 中的 asp:buttons?

从asp.net后面的代码中获取锚元素的href属性

Asp.net 从 asp 中的文本框获取值到代码后面

使用 asp.net 从后面的代码中获取 Jquery 的 Select2 的多个选定值