【问题标题】:Validation on usercontrol in ajax tab control验证 ajax 选项卡控件中的用户控件
【发布时间】:2011-05-12 16:17:13
【问题描述】:

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

有什么想法吗?

【问题讨论】:

    标签: visual-studio .net-3.5 ajaxcontroltoolkit comparevalidator


    【解决方案1】:

    我几个月前使用的技巧是在用户更改活动选项卡时在客户端调用 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);  
        }  
    }   
    

    【讨论】:

    • 所以你会把脚本放在 aspx 页面上而不是 usercontrol 本身? (我想看到那里发生的事件是有道理的。)
    • 验证控件仍将在您的内部 web 控件中。在页面上(即在 tabcontainer 控件内),您只需触发页面验证功能
    猜你喜欢
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 2011-02-19
    相关资源
    最近更新 更多