在VB.NET代码中动态添加JS块

时间:2014-02-28 12:50:49

标签: javascript vb.net

我正在研究一个系统,该系统管理多个页面给最终用户以进行数据输入。需要防止后退按钮(我知道,不理想,但这是要求),但在测试模式下查看页面时禁用此“阻止”。

我有必要的JS,它适用于我们需要的东西,但是我在向页面动态添加代码时遇到了问题,因此它会被触发。

这是什么意思?好吧,我可以动态添加代码块,因此看起来完全符合它应该,但代码不起作用。如果我复制并粘贴文本并手动将其添加到aspx页面(因此不使用后面的代码),它可以正常工作。

这是JS解决后退按钮的问题:

> <script type="text/javascript">
>       function preventBack(){window.history.forward();} setTimeout("preventBack()", 0); window.onunload=function(){null};
>     </script>

在我的aspx.vb代码隐藏文件中,我有以下内容:

If Not TestMode Then
  ' add JS
End If

我尝试过以下方式添加JS - 其中没有一个似乎有效:

  1. Page.RegisterClientScriptBlock("preventBack", "<script type=""text/javascript"">function preventBack(){window.history.forward();} setTimeout(""preventBack()"", 0); window.onunload=function(){null};</script>")

  2. Dim scriptText As New StringBuilder

    scriptText.Append("<script type='text/javascript'>")
    scriptText.Append("function preventBack(){")
    scriptText.Append("   window.history.forward();} ")
    scriptText.Append("setTimeout('preventBack()', 0); ")
    scriptText.Append("window.onunload=function(){null};")
    scriptText.Append("</script>")
    ClientScript.RegisterClientScriptBlock(Page.GetType, "noback", scriptText.ToString, False)
    
  3. Dim lit as New Literal

    lit.Text = "<script type='text/javascript' src='JS/noBack.js'>"  '"<script type='text/javascript'>function preventBack(){window.history.forward();} setTimeout('preventBack()', 0); window.onunload=function(){null};</script>"
    Head1.Controls.Add(lit)
    
  4. Dim gc As New HtmlGenericControl

    gc.TagName = "script"
    gc.Attributes.Add("type", "javascript")
    gc.Attributes.Add("src", "JS/noBack.js")
    Head1.Controls.Add(gc)
    
  5. ClientScript.RegisterClientScriptBlock(Me.GetType(), "MyScript", "JS/noBack.js", True)

  6. noBackJS文件包含上述JS代码。

    正如我所说,实际代码在渲染时会写入页面上的HTML,但根本不起作用/触发。显然我在这里遗漏了一些东西,但是不能为我的生活弄清楚它是什么,有人可以帮忙吗?

    THX。

2 个答案:

答案 0 :(得分:0)

试试这个:

Dim jScript As String = "<script>alert('')</script>"
Page.ClientScript.RegisterStartupScript(Me.GetType(), "Registered Script", jScript, False)

答案 1 :(得分:-1)

您可以使用eval(),例如:

eval($("#mytextbox").val())