繁体   English   中英

在javascript中抓取asp.net控件

[英]Grabbing asp.net controls in javascript

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

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

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

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

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

要么

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

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

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

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

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

$('#' + pageNameElements.textbox)

要么

document.getElementById(pageNameElements.textbox)

如果你不使用jquery。

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

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

看起来像

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

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

使用.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

我觉得你被卡住了。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM