如何使用JavaScript变量在JavaScript函数中获取ASP.NET ClientID?

时间:2012-11-27 20:03:07

标签: c# javascript asp.net controls

我希望能够在JavaScript函数中获得ASP.NET控件的ClientID。我还希望能够传入包含控件名称的var,以便不同的控件可以使用相同的函数。

例如,如果我想使用名为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 :我可以使用thisgetAttribute来获取我需要的内容。 (显然这只会在你所指的控件是你点击的控件时才有效,但这就是我所需要的)像这样:

function doStuffToGenericControl(controlName)
{
     var controlID = controlName.getAttribute('id');
     var control = document.getElementById(controlID);
     //do stuff with control
}

3 个答案:

答案 0 :(得分:1)

'<%= Button1.ClientID %>'是用asp.net页面渲染中的控件ID替换的,

但是当您在客户端传递变量时,您应该传递id并使用它而不使用任何%scops

所以试试这个

function getGenericControl(control)
{
    var dynamicControl = control;
    alert(dynamicControl);
    //do stuff with dynamicContorl
}

<强>更新

您可以使用&lt;%= ClientID%&gt;为上面的方法生成参数,所以只需像这样更改OnClientClicks并使用上面的方法

<asp:LinkButton ID="Button2" runat="server" OnClientClick="doStuffToGenericControl(this)">...</asp:LinkButton>

答案 1 :(得分:1)

不是传递控件名称,为什么不通过在这样的函数中传递它来传递控件本身:

  <asp:LinkButton ID="Button2" runat="server" OnClientClick="doStuffToGenericControl(this)">...</asp:LinkButton>

你的职能是:

function getGenericControl(control)
{
    var dynamicControl = control;
    alert(dynamicControl.id);
    //do stuff whatever you want with dynamicContorl
}

答案 2 :(得分:0)

如果可能的话,我强烈建议使用一个类,

var elems = document.getElementsByTagName('*'), i;
    for (i in elems) {
        if((' ' + elems[i].className + ' ').indexOf(' ' + matchClass + ' ')
                > -1) {
            elems[i].innerHTML = content;
        }
    }