在javascript中抓取asp.net控件

时间:2010-02-11 18:16:38

标签: asp.net javascript

我有一个页面,它被代码所淹没,如:

var textBox = $get("<%=textState.ClientID%>");

这要求我在页面内部使用JavaScript,而不是将其隐藏在js文件中。 有更好的方法吗?

document.getElementById不起作用,因为我最终得到了这样的代码:

var textBox = document.getElementById("originDestinationControl_textState");

var textBox = document.getElementById("ctl00_ContentPlaceHolder_originDestinationControl_textState");

取决于我引用这些控件的位置(在母版页和/或用户控件内)

4 个答案:

答案 0 :(得分:3)

我通常会将这样的内容粘贴到我想要使用单独的js文件的页面中。

<script type="text/javascript">
    var pageNameElements = {
        textbox : '<%= textbox.ClientId %>',
        button : '<%= button.ClientId %>'
    };
</script>

通过这种方式,您可以获得一个很好的javascript对象,其中包含您可以在js文件中使用的所有控件ID。

$('#' + pageNameElements.textbox)

document.getElementById(pageNameElements.textbox)

如果你没有使用jquery。

答案 1 :(得分:2)

我可以建议学习jQuery吗?自从我开始使用它以来,我从来没有必须处理凌乱的asp标签来获取页面上的控件。

var textBox = $get("<%=textState.ClientID%>");

看起来像

var textBox = $("input[id$='_textState']");

在jQuery中。更好的是,你可以将它放入它自己的js文件中!

答案 2 :(得分:1)

使用.NET 4.0,您实际上可以完全控制它:

http://www.codeproject.com/KB/aspnet/ASP_NET4_0ClientIDFeature.aspx

它与Visual Studio 2010一起发布了Release Candidate。我知道这不是一个理想的解决方案,但它是一个。

http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx

答案 3 :(得分:0)

我认为你被困住了。

您的textState.ClientId代码需要保留在aspx页面本身。这是因为它是客户端。 JavaScript包含文件是从页面的其余部分单独下载的,因此它不知道如何处理它。

如果你需要来清理它,你可以尝试使用经典的asp风格包含文件。但是,在asp.net中,他们最终会添加比他们修复的更多的混乱。