ValidatorCalloutExtender, содержащий TabContainer / TabPanels? - PullRequest
1 голос
/ 02 марта 2011

У меня есть TabContainer с тремя страницами полей ввода.Для каждой TabPanel есть набор ValidatorCalloutExtenders (по одному для каждого валидатора на панели).

Когда я проверяю страницу, проверка работает только так, как и для текущей панели.Для всех скрытых панелей вкладок все подсказки валидатора видны в беспорядке, когда выбрана эта вкладка.

Я поместил кнопку на первой и второй вкладках, которая выглядит примерно так:

<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, но я чувствую себя скованным и противостоящим ему.)

1 Ответ

1 голос
/ 02 марта 2011

Неважно ... Я такой толстый.

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