无法在jquery中获取服务器控件ID

时间:2014-04-09 13:42:57

标签: jquery asp.net

我有一些带有服务器和客户端控件的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; });

3 个答案:

答案 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);