将GET变量挂钩到onload JavaScript事件

时间:2012-03-07 14:26:07

标签: c# javascript asp.net html

在此处使用C#.NET 3.5 Framework创建.aspx网页。无论如何,该页面接受GET变量x,如果提供,我希望页面将JavaScript函数foo(x)挂钩到页面的onload事件。必须将GET变量作为参数传递给foo

我对其他服务器端脚本语言比较熟悉,例如,在php中我可能会做类似下面的代码片段,我将php直接嵌入到html页面的<head>中。 <script>(为简单起见,我只是将foo设置为window.onload,因为我可能只会为此事件设置一个函数):

...

<script language="javascript" type="text/javascript">
function foo(x) {
    alert( x );
}

<?php

if( isset($_GET["x"]) )
    echo "window.onload = foo('" . $_GET["x"] . "');";
?>
</script>

...

或者,我将.js文件设为php解析文件,通过src <script>的{​​{1}}属性输出相同的文件并链接到html文件中(但我还是需要一点)嵌入式PHP将GET变量传递给该脚本文件src URL)。

无论如何,对于这个aspx的东西,它看起来有很大的不同,因为我有一个潜在的.cs文件,似乎有一个巨大的努力将这样的逻辑与内容分开page(.aspx)文件。我不确定如何在这种环境中获得同样的行为。

将我的JavaScript源代码作为字符串等放在我的C#源代码中并不是很理想。

无论如何,我对此进行了一些搜索,但我找不到一个干净的解决方案。任何人都可以在.aspx中找到合适的解决方案吗?

我还应该指出,我不想依赖JavaScript来解析window.location变量的GET,因为我使用了大量的路径重写而我想要灵活处理POST变量。

更新

好的,所以到目前为止使用的答案更侧重于asp方面的东西,我可以尽可能接近这样的东西模仿php风格:

...
    <script language="javascript" type="text/javascript">

    function foo(x) {
        alert( x );
    }


    <%    
       String x = this.Request["x"];
       if(!String.IsNullOrEmpty(x))
           Response.Write( "window.onload = foo('" + Server.UrlDecode(x) + "');" );

    %>
</script>
...

虽然这有效,但这并不是我想要的答案。我希望有一个aspx.cs解决方案,它将离开在我的html文件中嵌入这种代码的需要。当我给出PHP示例时,也许我误导了。我想在世界的.cs方面处理这个,而不是直接将它嵌入到aspx文件的html中。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我会在你自己的脚本块中定义一些全局变量,并保留主JS文件。

<script type="text/javascript">
var foo = <% = yourVar %>
</script>

答案 1 :(得分:1)

在aspx中(不在aspx.cs中):

<% String x = this.Request["x"]; if (!String.IsNullOrEmpty(x)) { %> <script type="text/javascript"> window.onload = foo('<%=x%>'); </script> <% } %>