0

我正在尝试将document.getElementById与动态变量一起使用。

动态变量将根据从 URL 中的代码 (c#) 中读取的查询字符串进行设置。

例如,这将是它的理想工作方式:

后面的c#代码:

string myVar = Request.QueryString[0];
myVar = myVar + "Link";

JavaScript:

<script>
    document.getElementById(myVar)
</script>

关于如何让它发挥作用的任何想法?

4

2 回答 2

2

您可以简单地将其插入 .aspx 页面上的脚本块中(注意,避免使用“var”作为名称,因为这是 Javascript 中的保留字):

<script>
    var id = '<%= HttpUtility.JavaScriptStringEncode(Request.QueryString[0]) + "something" %>';
    document.getElementById(id);
</script>

您可以使用以下代码将其注入到页面中RegisterStartupScript

Page.ClientScript.RegisterStartupScript(this.GetType(), "QueryId", 
    string.Format("<script>var id='{0}';</script>", 
        HttpUtility.JavaScriptStringEncode(Request.QueryString[0]) + "something"
    )
);
于 2013-10-19T22:25:41.580 回答
1

问题是你不能只使用 JS 与服务器端通信,JS 是客户端,所以你不会得到你在服务器端创建的变量。

要获得它们,您需要:

<%= write_the_thing_here %>

对于您的代码,您将编写:

string someThing = "<%= HttpUtility.HtmlEncode(Request.QueryString[0]) %>";
// now use this someThing in the document..you can use var instead of string
// but not them both..
document.getElementById(someThing); 
// note the semicolon on the end, to close it..

您不应该使用string var它们,因为它们是 JavaScript 和 ASP.NET 中的数据类型,因此代码可能会在想这到底是什么时感到困惑。

取而代之的是,您还可以尝试将隐藏的输入字段编写为

<input type="hidden" name="someThing" value="@Request.QueryString[0]" />

然后用它来动态地做任何你想做的事情。如果您真的想使用来自服务器的 ID,这可能是执行此操作的简单方法。

对不起 jQuery 好友:

var someThinge = $('input[type="hidden"]').val();

然后,继续你的工作!

Alexei Levenkov的帮助说明:JavaScript 中的分号是可选的。它们的主要用途是区分代码是由混淆器/最小化器(工具或人)还是普通开发人员编写的:)

于 2013-10-19T22:32:41.503 回答