1

我有一個三頁輸入字段的TabContainer。對於每個TabPanel,都有一組ValidatorCalloutExtender(面板上的每個驗證器都有一個)。ValidatorCalloutExtender包含TabContainer/TabPanels?

當我驗證頁面時,驗證只適用於當前面板。對於所有隱藏的TabPanel,當選擇該選項卡時,所有驗證程序工具提示都可以在混亂中看到。

我已經把第一和第二個標籤頁,看起來大致是這樣的一個按鈕:

<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正在使用,但我感覺受到約束和反擊。)

回答

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