从变量获取控件的客户端ID

时间:2009-10-19 15:41:12

标签: asp.net javascript

我想在javascript中使用asp.net文本框控件(txtTest)的客户端ID。但这里的问题是控件ID来自变量,如下所示

var testName = 'txtTest';
var testCntrl = document.getElementById('<%=' + testName + '.ClientID %>');

但它的投掷

  

CS1012:中有太多字符   字符文字

任何人都可以帮忙......

3 个答案:

答案 0 :(得分:2)

试试这个:

document.getElementById('<%=txtTest.ClientID %>');

或者更接近原始示例:

var testName = '<%=txtTest.ClientID %>'; 

var testCntrl = document.getElementById(testName);

从您的示例中可以看出,您已经设法将自己与服务器端以及客户端代码混淆。

答案 1 :(得分:1)

&lt;%= aspControlID.ClientID%&gt;是服务器端控件,但您尝试将clientide变量名称传递给它。当testName设置为'txtTest'时已经太晚了,你已经在客户端了。

有许多替代方法可以将服务器端ClientID作为Rick Stahl discusses

1)你可以预先加载你知道你将需要的所有控件ID,当你需要它们时,他们会查询它们(他使用jquery)。

var ids = { 
    txtSymbol: "#<%= txtSymbol.ClientID %>",
    PageContent: "#<%= PageContainer.ClientID %>"
}

这也可以写成:

var txtSymbol = document.getElementById('<%= txtSymbol.ClientID %>');
var txtBlah = document.getElementById('<%= txtBlah.ClientID %>');

2)或者,他写了一个函数,可以从客户端获得控件

function $$(id, context) {
    var el = $("#" + id, context);
    if (el.length < 1)
        el = $("[id$=_" + id + "]", context);
    return el;
}

请注意,有一些严重的警告。这依赖于JQuery,所以一定要包含该库并使用它像$$('myASPControlID')。val('new val');问题在于,如果您有任何控件可以创建其他控件,例如listviews,repeater,gridviews等。那么查找子控件的单个实例将采取一些策略。在这种情况下,此工具只会获得重复控件的第一个实例。

但是,该函数提供了一种解决此问题的方法,允许您在第二个字段中指定包含元素。

修改

嘿L G,如果你真的需要从客户端传递你的变量,那么只需添加第二个函数和一个指向JQuery库的链接。然后,您可以使用这个简单的代码来控制:

var testName = 'txtTest';
var testCntrl = $$(testName);

答案 2 :(得分:0)

如果它是C#代码(假设编译错误),则需要用"而不是'包围字符串。

'用于char值,它只能包含一个字符(如果是转义字符,则为两个字符,例如'\n')。

但是我并没有真正得到编译错误和代码之间的联系,因为C#编译器不应该为javascript代码烦恼...