我希望能够在JavaScript函数中获得ASP.NET控件的ClientID。我也希望能够传入包含控件名称的var,以便不同的控件可以使用相同的函数。如何使用JavaScript变量在JavaScript函数中获取ASP.NET ClientID?
例如,如果我想用一个名为Button1控制,这工作得很好:
function doStuffToButton1Control()
{
var buttonControl = document.getElementById('<%= Button1.ClientID %>');
//do stuff with buttonControl
}
,但我得到一个错误,当我试图让控件名称动态。我想串起来ClientID的调用,就像这样:
function doStuffToGenericControl(controlName)
{
var dynamicControl = document.getElementById('<%= ' + controlName + '.ClientID %>');
//do stuff with dynamicContorl
}
我创建的字符串时使用双引号或单引号试过,但错误总是“在字符串文字字符太多”或“字符文字中的字符太多”。控件存在且名称正确传递(经alert(name)
测试)。
有没有更好的方法去解决这个问题,还是我错过了明显的东西?
谢谢!
更新:此功能将在母版页上。任何数量的子页面都会调用它。例如,一个孩子页面可能有一个调用它像这样的ASP控制:
<asp:LinkButton ID="Button2" runat="server" OnClientClick="doStuffToGenericControl('Button2')">...</asp:LinkButton>
但另一个页面可能有这样的ASP控制也称之为:
<asp:LinkButton ID="Button4" runat="server" OnClientClick="doStuffToGenericControl('Button4')">...</asp:LinkButton>
然而,这些控件的ID的经常由ASP.NET在渲染上进行更改,所以它们最终看起来像例如MainContent_Button2
而不是仅仅Button2
。为了解决这个问题,我通常只使用<%= Button1.ClientID %>
,但是因为我想让任何数量的控件能够使用这个函数,所以我遇到了一些麻烦。
更新2:我能够使用this
以及getAttribute
调用来获得我所需要的。 (显然,这只会工作,当你指的是控制你点击了一个,但是这是我所需要的),像这样:
function doStuffToGenericControl(controlName)
{
var controlID = controlName.getAttribute('id');
var control = document.getElementById(controlID);
//do stuff with control
}
请提供更多的代码,这种方法是如何被调用?你想传递给这个方法的是什么论点? –
一旦加载页面,任何服务器端的C#代码就完成了。任何服务器端的'<%%>'东西都被解析为javascript函数的纯文本(假设它实际上吐出了一些东西)。是否有理由不知道控制客户端的实际ID? – Snuffleupagus
请参阅上面的更新。谢谢! – rownage