我有一些带有服务器和客户端控件的usercontrol。我正在尝试使用jquery(在按钮单击事件上)将文本框中的值添加到列表框但是会出现以下错误;
Microsoft JScript运行时错误:语法错误,无法识别的表达式:#<%= txtSubVendorRef.ClientID%>
ascx文件;
<tr>
<td>
<asp:TextBox ID="txtSubVendorRef" TabIndex="34" MaxLength="32" runat="server"
Width="220"></asp:TextBox>
</td>
<td valign="top">Visit Dates</td>
<td>
<input type="button" id="btnAddRef" name="filter" value="Filter" />
</td>
<td>
<asp:ListBox runat="server" ID="lstVisitDates" Width="220px"></asp:ListBox>
</td>
</tr>
这是js文件中的jquery函数;
$("#btnAddRef").click(function () {
var txt = $("#<%=txtSubVendorRef.ClientID%>");
var svc = $(txt).val(); //Its Let you know the textbox's value
var lst = $('#<%= lstVisitDates.ClientID %>');
var options = $('#<%= lstVisitDates.ClientID %> option');
var alreadyExist = false;
$(options).each(function () {
if ($(this).val() == svc) {
alert("Item alread exists");
alreadyExist = true;
return;
}
txt.val("");
// alert($(this).val());
});
if (!alreadyExist)
$(lst).append('<option value="' + svc + '">' + svc + '</option>');
return false; });
答案 0 :(得分:3)
如果您的javascript代码位于外部js文件中,则无法访问服务器端代码。这种在javascript中包含服务器变量的方式只能与内联javascript一起使用到UserControl / aspx页面。
另请注意,如果您使用&gt; = 4.0 .Net Framwork,则可以使用控件的属性ClientIDMode="Static"
来保留您指定的ID而不继承父ID
答案 1 :(得分:1)
将ClientIdMode="Static"
添加到您的服务器控件中,您只需在javascript中使用分配给它们的原始ID。
答案 2 :(得分:0)
作为解决方法,我通常会创建一个javascript模块,并在我的外部js文件中包含该逻辑块。例如:
var jsModule = (function () {
var obj = function (initData) { // constructor
// private variables
var lstVisitDates = initData.lstVisitDates;
this.btnAddRefClick = function () { // public instance
// use your variables here.
}
}
return obj;
})();
然后在我的aspx或ascx页面中,我获取所有clientId值并将它们传递给我的js模块构造函数:
var initData = {
lstVisitDates: $('#<%= lstVisitDates.ClientID %>'),
options: $('#<%= lstVisitDates.ClientID %> option')
};
var myModule = new jsModule(initData);
$("#btnAddRef").click(myModule.btnAddRefClick);