我有一系列嵌套在需要验证的ajaxToolkit:TabContainer中的usercontrol。用户控件有一个txtFlightFrom和一个txtFlightTo控件,如果txtFlightFrom中有数据,我需要确保它们是txtFlightTo中的数据(如果没有目标机场,你不能飞出一个机场)。我第一次尝试使用asp:CompareValidator控件但我真正的问题是当我进入下一个选项卡时我是如何触发验证器的。我尝试从我的aspx页面做这个,但这只会导致问题,从逻辑上讲对我没有意义。
ASCX:
<asp:CompareValidator ID="CompareValidator1" runat="server" ControlToValidate="txtFlightFrom" ControlToCompare="txtFlightTo" Type="String" ErrorMessage="CompareValidator" />
<asp:Label ID="lblCompareTOFROM" runat="server" />
<asp:TextBox ID="txtFlightFrom" runat="server" />
<asp:TextBox ID="txtFlightTo" runat="server" />
ASPX:
<ajaxToolkit:TabContainer ID="TabContainer1" runat="server" AutoPostBack="true" OnActiveTabChanged="TabContainer1_ActiveTabChanged">
<ajaxToolkit:TabPanel ID="TabPanel1" runat="server" HeaderText="Flights">
<ContentTemplate>
<ucFlight:FlightControl id="FlightControl1" Runat="server" />
<ucFlight:FlightControl id="FlightControl2" Runat="server" />
</ContentTemplate>
</ajaxToolkit:TabPanel>
<ajaxToolkit:TabPanel ID="TabPanel2" runat="server" HeaderText="Cars">
stuff
</ajaxToolkit:TabPanel>
ascx.cs
public string ValidateToFrom
{
get { return lblCompareTOFROM.Text; }
set { lblCompareTOFROM.Text = value; }
}
aspx.cs
if (Page.IsValid)
{
FlightControl1.ValidateToFrom = "Not Valid";
}
我也在ascx.cs中尝试过这段代码的变体,但这也没有意义,因为事件发生在aspx.cs
有什么想法吗?
答案 0 :(得分:0)
我几个月前使用的技巧是在用户更改活动选项卡时在客户端激活调用javascript函数的验证功能。在网上快速搜索引导我进入example(此刻我无法进行测试,对不起):
<ajaxToolkit:TabContainer runat="server" ID="Tabs" OnClientActiveTabChanged="ActiveTabChanged">
//Javascript function
function ActiveTabChanged(sender, e) {
if (Page_ClientValidate() == false) {
var ctrl = $find("Tabs");
var tabpanel = ctrl.get_tabs()[0];
handleTabChange = false;
ctrl.set_activeTab(tabpanel);
}
}