【问题标题】:Inject Javascript from asp.net code behind files从文件后面的 asp.net 代码中注入 Javascript
【发布时间】: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 中尝试过这个,并且在所有这些中都有效。你用的是哪个浏览器?

标签: c# javascript asp.net


【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多