0

我有点难以弄清楚如何将控件 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 参数,它的值是 <%= gvCompanySelector.ClientID %> 传递给它。当我期望参数显示类似 ct100_blahlbah_gvCompanySelector ClientID 时。

让我丧命的是,如果我只使用标准的 Anchor 标签,ClientID 就可以通过。

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

谢谢!

4

3 回答 3

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 模式。您可以将 cilent 模式覆盖为静态,然后您可以在自己的控件中传递“gvCompanySelector”。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-控制

首先创建一个名为“MyControls”的类库。将 Referenceecen 添加到 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

于 2014-03-21T04:51:39.820 回答
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 集合,因为该控件包含代码块(即 <% ... %>)。

然后使用

 var gridElem = document.getElementById('<%# idofthecontrol.ClientID %>');
于 2014-03-21T04:51:40.517 回答
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>

希望有任何其他建议。

于 2014-03-21T05:00:33.413 回答