0

我有一系列嵌套在需要验证的 ajaxToolkit:TabContainer 中的用户控件。用户控件有一个 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 中尝试了此代码的变体,但这也没有意义,因为事件发生在 ascx.cs

有什么想法吗?

4

1 回答 1

0

我几个月前使用的技巧是在用户更改活动选项卡时在客户端调用 javascript 函数触发验证函数。在网上快速搜索将我带到这个例子(我现在不能做测试,对不起):

<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);  
    }  
}   
于 2010-11-19T14:50:10.217 回答