Asp.试图获取客户端id

本文关键字:客户端 id 获取 Asp | 更新日期: 2023-09-27 17:51:14

我有点卡住了,试图找出如何传递一个控件的ClientID到我的一个JavaScript方法。

编辑:我意识到我应该提到这是一个Asp。基于。Net 3.5构建的。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参数得到的值<%= gvCompanySelector。ClientID %>传递给它。当我期望参数显示类似ct100_blahlbah_gvCompanySelector ClientID.

让我抓狂的是,如果我只使用一个标准的锚标记,那么ClientID就可以通过了。

如果建议是使用AddHandler或在我的代码后面构建javascript调用,我想避免它。我试图在这段代码中保持一些一致性。= -/

谢谢!

Asp.试图获取客户端id

就用

 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 %>');

有时会显示错误:

控件集合不能被修改,因为控件包含代码块(即<%…)%>)。

然后使用

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

为什么需要从参数传递Client 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模式。你可以将客户模式重写为静态模式然后你可以在你的控件中传入'gvCompanySelector'它self。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

首先创建一个名为"MyControls"的类库。将referen添加到系统。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>

如果您想查看有关重写控件的更多信息,请参阅以下链接-https://web.archive.org/web/20210323170551/http://www.4guysfromrolla.com/articles/012308-1.aspx

我发现最好的答案是创建一个全局变量。可能像这样比使用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>

希望有其他建议