Asp.Net试图获得ClientID

时间:2014-03-21 04:45:58

标签: c# javascript asp.net .net clientid

我试图弄清楚如何将控件ClientID传递给我的一种JavaScript方法,我有点困惑。

编辑:我意识到我应该提到这是一个基于.Net 3.5的Asp.Net应用程序。不能使用.Net 4.0技巧,但你们在回复中提到的4.0技巧肯定是要记住的东西,并且很容易解决。

当我做下面的事情时,我最终得到了我的Javascript方法获取<%= gvCompanySelector.ClientID%>的文字文本。在我的论证中显示。

以下是我的Asp.Net控件在Aspx页面中的样子。

<asp:HyperLink ID="aShowList" runat="server" 
onclick="javacript:showCompanySelector('divCompanySelector','<%= gvCompanySelector.ClientID %>');" 
CssClass="button">Select</asp:HyperLink>

我的javascript方法看起来像这样。

function showCompanySelector(divName,gridName) {
            var elem = document.getElementById(divName);
            var gridElem = document.getElementById(gridName);
            if (elem.style.visibility === 'visible') {
                elem.style.visibility = 'hidden';
                elem.style.height = '0px';
                gridElem.style.height = '0px';
            }
            else {
                elem.style.visibility = 'visible';
                elem.style.height = '200px';
                gridElem.style.height = null;
            }
        }

这是我的gridName参数,其值为&lt;%= gvCompanySelector.ClientID%&gt;进入它。当我期望论证显示类似ct100_blahlbah_gvCompanySelector ClientID。

让我失望的是,如果我只使用标准的Anchor标签,则ClientID通过就好了。

如果建议使用AddHandler或在我的Code Behind中构建javascript调用,我想避免它。我试图在这段代码中有一定的一致感。 = - /

谢谢!

3 个答案:

答案 0 :(得分:1)

为什么需要从参数中传递客户端ID。你也可以这样做。

function showCompanySelector(divName) {
        var elem = document.getElementById(divName);
        var gridElem = document.getElementById('<%= gvCompanySelector.ClientID %>');
        if (elem.style.visibility === 'visible') {
            elem.style.visibility = 'hidden';
            elem.style.height = '0px';
            gridElem.style.height = '0px';
        }
        else {
            elem.style.visibility = 'visible';
            elem.style.height = '200px';
            gridElem.style.height = null;
        }
    }

另一种方法是asp.net 4.0静态客户端Id模式。您可以将静默模式覆盖为静态,然后您可以传递&#39; gvCompanySelector&#39;在你的控制中它自我。http://www.dotnetjalps.com/2009/07/client-id-of-control-in-aspnet-40.html

如果您使用的是较低版本的.NET Framework,则可以覆盖此类客户端ID - http://weblog.west-wind.com/posts/2006/Feb/24/Overriding-ClientID-and-UniqueID-on-ASPNET-controls

首先创建一个名为&#39; MyControls&#39;的类库。将Referecen添加到System.web,然后覆盖网格视图,如下所示。

using System.Web.UI.WebControls;
namespace MyControls{
public class MyGrid : GridView
{
    public override string ClientID
    {
        get
        {
            return ID;
        }
    }
}}

然后在aspx端注册你的控件如下。

<%@ Register Assembly="MyControls" Namespace="MyControls" TagPrefix="myc" %>

然后使用如下控件。

 <myc:Mygrid Id="myGrid" runat="server">

 </myc:Mygrid>

如果您想了解有关覆盖控制的更多信息,请参阅以下链接 - http://www.4guysfromrolla.com/articles/012308-1.aspx

答案 1 :(得分:1)

只需使用

 var elem = document.getElementById('the id of the required control');
            var gridElem = document.getElementById('the id of the required control');

无需将其传递给javascript,并将控件的clientIDmode更改为static

无需在参数

中传递它
var gridElem = document.getElementById('<%= idofthecontrol.ClientID %>');

有时可能会显示错误:

  

由于控件无法修改Controls集合   包含代码块(即&lt;%...%&gt;)。

然后使用

 var gridElem = document.getElementById('<%# idofthecontrol.ClientID %>');

答案 2 :(得分:0)

我发现的最佳答案是创建一个全局变量。可能比使用AddHandler类型编码更少,但至少它保持我的JavaScript与我的JavaScript。

<script>
var gvCompanySelectorClientID = = '<%= gvCompanySelector.ClientID %>';

function showCompanySelector(divName,gridName) {
            var elem = document.getElementById(divName);
            var gridElem = document.getElementById(gridName);
            if (elem.style.visibility === 'visible') {
                elem.style.visibility = 'hidden';
                elem.style.height = '0px';
                gridElem.style.height = '0px';
            }
            else {
                elem.style.visibility = 'visible';
                elem.style.height = '200px';
                gridElem.style.height = null;
            }
        }

</script>

<asp:HyperLink ID="aShowList" runat="server" onclick="javacript:showCompanySelector('divCompanySelector','<%= gvCompanySelectorClientID %>');" CssClass="button">Select</asp:HyperLink>

会喜欢任何其他建议。