0

I have the following page. If you open this page, blank out the date, and click Tab 2 without leaving the date field, you can never make it back to Tab 1 to fix your problem.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register assembly="Telerik.Web.UI" namespace="Telerik.Web.UI" tagprefix="telerik" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="Scriptmanager1" runat="server" />
        <script type="text/javascript">

            function ClientTabSelecting(sender, args) {
                //This is mandatory to do some other stuff.
                var isvalid = Page_ClientValidate();
                if (isvalid) {
                    //
                } else {
                    args.set_cancel(true);
                }
            }
        </script>
        <telerik:RadTabStrip ID="RadTabStrip1" runat="server" MultiPageID="RadMultiPage1" OnClientTabSelecting="ClientTabSelecting" SelectedIndex="0">
            <Tabs>
                <telerik:RadTab ID="TAB1" Text="Tab 1" runat="server" PageViewID="HeaderPage" />
                <telerik:RadTab ID="TAB2" Text="Tab 2" runat="server"  />
            </Tabs>
        </telerik:RadTabStrip>
        <telerik:RadMultiPage ID="RadMultiPage1" runat="server" SelectedIndex="0">
            <telerik:RadPageView ID="HeaderPage" runat="server">
                <telerik:RadDatePicker ID="CloseDate1" runat="server" CausesValidation="True" SelectedDate="2014-11-1"></telerik:RadDatePicker>
                <asp:RequiredFieldValidator runat="server" Text="This field is mandatory" ControlToValidate="CloseDate1" ErrorMessage="Close date is required"></asp:RequiredFieldValidator>
            </telerik:RadPageView>
            <telerik:RadPageView ID="TransactionHistoryPage" runat="server">
                    You Should Never See This if the date entered is before 2014
                    <asp:Button runat="server" ID="Button1" CausesValidation="True"/>
            </telerik:RadPageView>
        </telerik:RadMultiPage>
        <asp:ValidationSummary runat="server"  ID="summary" />
    </div>
    </form>
</body>
</html>

This telerik control is rendered as multiple inputs - a parent wrapper and a child text input. If I add the following jquery repointing the validator at the child text input, it works fine.

$telerik.$(document).ready(function() { Page_Validators[0].controltovalidate = "CloseDate1_dateInput"; });

How do I point this validator at the input at design time without using jquery?

4

1 回答 1

0

删除 SelectedDate 属性,因为它设置了存储日期选择器值的隐藏字段的 value 属性,因此验证器应该检测到选择的日期。检查两种情况下呈现的 HTML 以了解我的意思。

        <telerik:RadDatePicker ID="RadDatePicker1" runat="server">
        </telerik:RadDatePicker>
        <asp:RequiredFieldValidator runat="server" ID="RequiredFieldValidator1" ControlToValidate="RadDatePicker1"
                                    ErrorMessage="Enter a date!"></asp:RequiredFieldValidator>
        <asp:Button ID="Button1" Text="text" runat="server" />

您可以在这里看到这一点:http: //demos.telerik.com/aspnet-ajax/calendar/examples/datepicker/validation/defaultcs.aspx

编辑:如果单个控件的验证没有通过,那么当您验证整个页面时,预计不会通过任何验证。考虑将验证分成组(通过 ValidationGroup 属性),例如针对每个 PageView,这样您就可以只验证所需的组,例如:

<script type="text/javascript">
                function ClientTabSelecting(sender, args) {
                    //This is mandatory to do some other stuff.
                    if (sender.get_selectedTab().get_text() == "Tab 1") {
                        var isvalid = Page_ClientValidate("theGroup");
                        if (isvalid) {
                            //
                        } else {
                            args.set_cancel(true);
                        }
                    }
                }
            </script>
            <telerik:RadTabStrip ID="RadTabStrip1" runat="server" MultiPageID="RadMultiPage1" OnClientTabSelecting="ClientTabSelecting" SelectedIndex="0">
                <Tabs>
                    <telerik:RadTab ID="TAB1" Text="Tab 1" runat="server" PageViewID="HeaderPage" />
                    <telerik:RadTab ID="TAB2" Text="Tab 2" runat="server" />
                </Tabs>
            </telerik:RadTabStrip>
            <telerik:RadMultiPage ID="RadMultiPage1" runat="server" SelectedIndex="0">
                <telerik:RadPageView ID="HeaderPage" runat="server">
                    <telerik:RadDatePicker ID="CloseDate1" runat="server" DateInput-ValidationGroup="theGroup"></telerik:RadDatePicker>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" Text="This field is mandatory" ValidationGroup="theGroup" ControlToValidate="CloseDate1" ErrorMessage="Close date is required"></asp:RequiredFieldValidator>
                </telerik:RadPageView>
                <telerik:RadPageView ID="TransactionHistoryPage" runat="server">
                    You Should Never See This if the date entered is before 2014
                    <asp:Button runat="server" ID="Button1" CausesValidation="True" />
                </telerik:RadPageView>
            </telerik:RadMultiPage>
            <asp:ValidationSummary runat="server" ID="summary" ValidationGroup="theGroup" />

对于复杂的输入系统,实际输入的更改会在您对其进行模糊处理时发生,因此如果您需要更详细的验证,您可以附加到输入的特定事件(例如模糊触发验证)。如果您不对其进行模糊处理,则保存日期的实际输入仍然具有旧日期,因为控件无法知道用户尚未完成编辑。

于 2014-12-03T17:16:31.883 回答