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调用,我想避免它。我试图在这段代码中保持一些一致性。= -/
谢谢!
就用
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>
希望有其他建议