代码之家  ›  专栏  ›  技术社区  ›  Boone

在JavaScript中获取ASP.NET控件

  •  3
  • Boone  · 技术社区  · 15 年前

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

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

    这要求我将JavaScript放在页面中,而不是很好地放在JS文件中。 有更好的方法吗?

    document.getElementByID不起作用,因为我最终得到如下代码:

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

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

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

    4 回复  |  直到 15 年前
        1
  •  3
  •   Oscar Kilhed    15 年前

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

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

    这样,您就得到了一个很好的javascript对象,其中包含了可以在JS文件中使用的所有控件ID,如下所示。

    $('#' + pageNameElements.textbox)
    

    document.getElementById(pageNameElements.textbox)
    

    如果您不使用jquery。

        2
  •  2
  •   Jagd Dai    15 年前

    我可以建议您学习jquery吗?自从我开始使用它以来,我从来没有必要处理凌乱的ASP标记来获取页面上的控件。

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

    看起来像

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

    在jQuery中。更好的是,您可以将其放入自己的JS文件中!

        3
  •  1
  •   Keith Adler    15 年前

    对于.NET 4.0,您实际上可以完全控制:

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

    它与Visual Studio 2010一起成为候选版本。我知道这不是一个理想的解决方案,但它是一个。

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

        4
  •  0
  •   AaronS    15 年前

    我想你被卡住了。

    您的textstate.clientID代码需要保留在ASPX页上。这是因为它被呈现为客户端。javascript包含的文件与页面的其他部分分开下载,因此它不知道如何处理。

    如果你 需要 要清除此问题,可以尝试使用经典的ASP样式包含文件。然而,在ASP.NET中,它们最终会添加比修复更多的混乱。