我试图弄清楚如何将控件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调用,我想避免它。我试图在这段代码中有一定的一致感。 = - /
谢谢!
答案 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>
会喜欢任何其他建议。