ValidatorCalloutExtender 包含 TabContainer/TabPanels?

发布于 2024-10-20 02:05:32 字数 1222 浏览 1 评论 0原文

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

当我验证页面时,验证仅适用于当前面板。对于所有隐藏的选项卡面板,当选择该选项卡时,所有验证器工具提示都杂乱可见。

我在第一个和第二个选项卡页上放置了一个按钮,大致如下所示:

<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? (严重的问题...这是一个 webforms 项目,如果 ajaxControlToolkit 正在使用,但我感觉受到它的限制和对抗。)

I have a TabContainer with three pages of input fields. For each TabPanel there's a set of ValidatorCalloutExtenders (one for every validator on the panel).

When I validate the page the validation only works as it should for the current panel. For all hidden TabPanels all the validator-tooltips are visible in a mess when that tab is selected.

I have put a button on the first and second tab pages that looks roughly like this:

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

where selecttab looks like this:

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

Pushing only the buttons, the tab pages actually work with the validation.
But when I click the tabs instead of buttons, hell brakes loose again.

First there are no way to prevent a tab switch.
Secondly if I add validation to OnClientActiveTabChanged="tabChanged" all the validators are piled up in a mess on the validated tab, as it's not displayed.

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;
    }

Did anyone get ValidatorCalloutExtenders working with TabContainer?

Is it worth bothering with ajaxControlToolkit at all or should I rewrite to jQuery without blinking? (Serious question... This is a webforms project where a lot if ajaxControlToolkit is in use, but I'm feeling constrained and countered by it.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

源来凯始玺欢你 2024-10-27 02:05:32

没关系……我太厚了。

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;
}

Nevermind... I'm so thick.

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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文