jQuery和usercontrols并不总是连接

时间:2015-08-06 06:16:22

标签: jquery asp.net user-controls vb.net-2010

我有一个包含3个用户控件的asp.net页面。 3个用户控件有一个jQueryUI-datepicker。

加载我的页面时,其中一个控件是可见的,另外两个不是。

当我在下拉列表中选择不同的值时,会显示相应的用户控件。

问题是我的日期选择器无法正常工作。

datepicker的代码:

$(function () {
    $("#txtCiStartDateF").datepicker();
    $(".needs-bdatepicker").datepicker({
        changeMonth: true,
        changeYear: true,
        dateFormat: 'dd-M-yy',
        altFormat: 'yy-M-dd',
        minDate: '+5d'
    });
});

<tr runat="server">
    <td><asp:Label ID="FromDateLabel" runat="server">From date:</asp:Label></td>
    <td>
        <input type="text" id="txtCiStartDateF" runat="server" class="needs-bdatepicker"/>
        <asp:TextBox id="txtCiStartDate" CssClass="hidden" runat="server" />
    </td>
</tr>

相同的代码在其他控件上,但具有不同的控件ID。

在控件之间切换的代码:

Private Sub HideAllUserControls()
    ChangeFrequency.Visible = False
    ChangeOpeningHours.Visible = False
    ChangeCiNumber.Visible = False
End Sub
Protected Sub TicketSubTypeSelected(ByVal sender As System.Object, ByVal e As EventArgs) Handles TicketSubTypeDropDownList.SelectedIndexChanged
    HideAllUserControls()

    Select Case TicketSubTypeDropDownList.SelectedItem.Value
        Case TicketSubType.ChangeFrequency
            TransportTypeRow.Visible = True
            ChangeFrequency.CiNumber = CINumberTextBox.Text
            ChangeFrequency.CustomerCode = CustomerCodeDropDownList.SelectedItem.Text
            ChangeFrequency.Visible = True
        Case TicketSubType.ChangeOpeningHours
            TransportTypeRow.Visible = True
            ChangeOpeningHours.CiNumber = CINumberTextBox.Text
            ChangeOpeningHours.CustomerCode = CustomerCodeDropDownList.SelectedItem.Text
            ChangeOpeningHours.Visible = True
        Case TicketSubType.ChangeCiNumber
            TransportTypeRow.Visible = False
            ChangeCiNumber.CiNumber = CINumberTextBox.Text
            ChangeCiNumber.CustomerCode = CustomerCodeDropDownList.SelectedItem.Text
            ChangeCiNumber.Visible = True
        Case Else

    End Select
End Sub

当我点击文本框时,没有显示日期选择器。 当我从下拉列表中选择不同的值之前单击文本框时,datepicker打开就好了。 当我从下拉列表中选择一个不同的值时,我没有得到日期选择器。

更新:当我第一次进入页面时,datepicker工作正常。我注意到我的控件有“hasDatepicker”类。当我从下拉列表中选择不同的值时,控件不再具有“hasDatepicker”类。 任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:0)

您在同一元素上调用var templateName = "name"; var indexNameTemplate = "te*"; var response = client.PutTemplate(templateName, t => t .Template(indexNameTemplate) .AddMapping<>(...); 两次。根据您的代码,第二个文本框甚至不是一个日期选择器。

添加.datepicker()

答案 1 :(得分:0)

您的控件可能嵌套在另一个容器控件中。在这种情况下,页面上呈现的ID(即服务器端的ClientId属性)可能与服务器端控件ID不同。容器控件ID将与它连接。

所以不要依赖JavaScript代码中的控件ID。使用方法通过其他方式获得该控件的引用。

由于您使用的是jQuery,因此一种方法是查看ID的结尾。例如像这样$("input[id$=txtCiStartDateF]")。这将选择ID以txtCiStartDateF结尾的所有控件,并且基本上可以控制您的兴趣。

还有其他方法可以选择控件,但我希望你明白这一点。

答案 2 :(得分:0)

我找到了解决方案。 在每个用户控件中,我重复代码来设置我的datepicker。 我已将其从我的usercontrols移动到包含页面。 现在一切正常。