Jquery 如何将RequiredFieldValidator与RadDatePicker';设计时的隐藏日期输入?
我有下一页。如果打开此页面,清空日期,然后单击选项卡2而不离开日期字段,则无法返回到选项卡1以解决问题Jquery 如何将RequiredFieldValidator与RadDatePicker';设计时的隐藏日期输入?,jquery,asp.net,validation,telerik,raddatepicker,Jquery,Asp.net,Validation,Telerik,Raddatepicker,我有下一页。如果打开此页面,清空日期,然后单击选项卡2而不离开日期字段,则无法返回到选项卡1以解决问题 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <%@ Register assembly="Telerik.Web.UI" namespace="Telerik.Web.UI" tagprefix="telerik" %>
<%@ 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>
如何在设计时将此验证器指向输入,而不使用jquery?删除SelectedDate属性,因为它设置了存储日期选择器值的隐藏字段的值属性,因此验证器将检测选定的日期。检查这两种情况下呈现的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" />
编辑:如果单个控件的验证未通过,则在验证整个页面时,预期不会通过任何验证。考虑将验证分解成组(通过验证组属性),例如对于每个页面视图,这样您就可以只验证需要的组,例如:
<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" />
函数ClientTabSelecting(发送方,参数){
//这是做其他事情的强制性要求。
如果(发件人.获取所选选项卡().获取文本()=“选项卡1”){
var isvalid=Page_ClientValidate(“theGroup”);
如果(有效){
//
}否则{
参数设置\取消(真);
}
}
}
如果输入的日期在2014年之前,您将永远不会看到这一点
对于复杂的输入系统,实际输入的更改在模糊时发生,因此如果需要更详细的验证,可以附加到输入的特定事件,如模糊到触发验证。如果不模糊它,保存日期的实际输入仍然具有旧日期,因为控件无法知道用户尚未完成编辑。这不起作用,因为我首先设置SelectedDate的唯一原因是隔离问题。如果删除所选日期,运行示例,设置值,模糊,然后删除值并单击第二个选项卡,问题仍然存在。使用另一个示例更新答案,并解释为什么需要模糊此解决方案的问题是,它允许用户清空信息并点击提交。将选项卡单击替换为提交单击,您将得到问题。如果我依赖客户端验证器来阻止提交,那么它们在这个实例中不起作用,并且允许向服务器发送空日期。此外,我还添加了blur()命令,但它们不能像预期的那样工作,因为验证器没有指向正在模糊的控件。此控件仅在所有其他处理完成后更新。嗯……可能是IE中的事件顺序出现了问题,onblur中触发了DateInputs的验证。我认为目前最好的做法是联系Telerik支持部门。
<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" />