1

我有一个包含三页输入字段的 TabContainer。对于每个 TabPanel,都有一组 ValidatorCalloutExtenders(面板上的每个验证器一个)。

当我验证页面时,验证仅适用于当前面板。For all hidden TabPanels all the validator-tooltips are visible in a mess when that tab is selected.

我在第一个和第二个标签页上放了一个按钮,大致如下所示:

<input type="button" class="next" value="Next" onclick="Page_ClientValidate('Contact'); if(Page_IsValid) { SelectTab(1); }" />

其中 selecttab 看起来像这样:

function SelectTab(ix)
{
    var container = $find('<%=createUserTabs.ClientID%>');
    container.set_activeTabIndex(ix);
}

仅按按钮,标签页实际上与验证一起工作。但是当我点击标签而不是按钮时,地狱再次松动。

首先,没有办法阻止标签切换。其次,如果我将验证添加到 OnClientActiveTabChanged="tabChanged" 所有验证器都堆积在经过验证的选项卡上,因为它没有显示。

function tabChanged(sender, args) {
    tabIndex = sender.get_activeTabIndex();

    if (!Page_ClientValidate('Contacts')) {
        if (tabIndex != 0) {
            sender.set_activeTabIndex(0);
            Page_ClientValidate('Contacts'); //Doesn't fix the validator soup
        }

        return;
    }

有没有人让 ValidatorCalloutExtenders 与 TabContainer 一起工作?

是否值得为 ajaxControlToolkit 烦恼,还是应该不眨眼地重写 jQuery?(严肃的问题......这是一个网络表单项目,如果 ajaxControlToolkit 正在使用中,但我感到受到限制和反击。)

4

1 回答 1

1

没关系...我很厚。

var getouttahere = false;

function tabChanged(sender, args) {

    if (getouttahere) {
        return;
    }
    getouttahere = true;

    tabIndex = sender.get_activeTabIndex();

    do {

        sender.set_activeTabIndex(0);
        if (!Page_ClientValidate('Contact') || 0 == tabIndex) {
            break;
        }

        sender.set_activeTabIndex(1);
        if (!Page_ClientValidate('Delivery') || 1 == tabIndex) {
            break;
        }

        sender.set_activeTabIndex(2);
        if (!Page_ClientValidate('Invoicing')) {
            break;
        }

    } while (false);

    getouttahere = false;
}
于 2011-03-02T12:16:16.213 回答