C#项目中的CalendarExtender日期验证

时间:2016-02-29 13:15:31

标签: c# validation date repeater ajaxcontroltoolkit

我有以下代码使用 ASP Repeater Control 创建表格:

<asp:Repeater ID="Reptr" OnItemDataBound="Reptr_ItemDataBound" runat="server" Visible="False">
    <HeaderTemplate>
        <table>
            <tr>
                <td>
                    Start Date
                </td>
                <td>
                    End Date
                </td>
            </tr>
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
            <td>
                <asp:TextBox ID="Start" Text='<%# Convert.ToDateTime(Eval("StartDate")).ToShortDateString() %>' ReadOnly="true" runat="server"></asp:TextBox>
                <act:CalendarExtender ID="CalendarStart" PopupButtonID="DatePickerStart" TargetControlID="Start" onDateSelectionChanged = "checkDate" runat="server"><act:CalendarExtender>
                <asp:ImageButton ID="DatePickerStart" ImageUrl="~/Images/calendar.gif" runat="server" />
            </td>
            <td>
                <asp:TextBox ID="End" Text='<%# Convert.ToDateTime(Eval("EndDate")).ToShortDateString() %>' ReadOnly="true" runat="server"></asp:TextBox>
                <act:CalendarExtender ID="CalendarEnd" PopupButtonID="DatePickerEnd" TargetControlID="End" onDateSelectionChanged = "checkDate" runat="server"></act:CalendarExtender>
                <asp:ImageButton ID="DatePickerEnd" ImageUrl="~/Images/calendar.gif" runat="server" />
            </td>
        </tr>
    </ItemTemplate>
    <AlternatingItemTemplate>
                    <tr>
            <td>
                <asp:TextBox ID="Start" Text='<%# Convert.ToDateTime(Eval("StartDate")).ToShortDateString() %>' ReadOnly="true" runat="server"></asp:TextBox>
                <act:CalendarExtender ID="CalendarStart" PopupButtonID="DatePickerStart" TargetControlID="Start" onDateSelectionChanged = "checkDate" runat="server"><act:CalendarExtender>
                <asp:ImageButton ID="DatePickerStart" ImageUrl="~/Images/calendar.gif" runat="server" />
            </td>
            <td>
                <asp:TextBox ID="End" Text='<%# Convert.ToDateTime(Eval("EndDate")).ToShortDateString() %>' ReadOnly="true" runat="server"></asp:TextBox>
                <act:CalendarExtender ID="CalendarEnd" PopupButtonID="DatePickerEnd" TargetControlID="End" onDateSelectionChanged = "checkDate" runat="server"></act:CalendarExtender>
                <asp:ImageButton ID="DatePickerEnd" ImageUrl="~/Images/calendar.gif" runat="server" />
            </td>
        </tr>
    </AlternatingItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>
</asp:Repeater>

如需快速参考,以下是上述代码的输出方式,如下图所示:

RepeaterTable

此序列将包含两行以上的开始结束日期。行数不固定,并且可以根据一些其他事物的选择而变化(即,它们被动态加载到转发器控制表中)。这些单元格中的数据由 DataSource 中的 DataBinding 填充。

此外,表格中的日期将在显示时填充。验证仅在更改任何日期时发生。

我试图在 CalendarExtender 的日期更改中加入以下验证

  • 结束日期应<开始日期
  • 不允许过去的日期
  • 当前行的结束日期更少,然后下一行的开始日期

我在 aspx 页面中使用以下代码验证了过去的日期:

function checkDate(sender, args) {

        if (sender._selectedDate < new Date()) {
            alert("You cannot select a day earlier than today!");
            sender._selectedDate = new Date();
            sender._textbox.set_Value(sender._selectedDate.format(sender._format));
        }
    }

但我不能从onSelectedDateChanged()调用多个函数。我有以下疑问:

  1. 当用户从 CalendarExtender 中选择日期时,如何确保执行上述所有验证?
  2. 如何将转发器表中填充的日期存储在 ViewState 中?

0 个答案:

没有答案