我有一个包含三页输入字段的TabContainer。对于每个TabPanel,都有一组ValidatorCalloutExtenders(一个用于面板上的每个验证器)。
当我验证页面时,验证仅适用于当前面板。对于所有隐藏的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;
}
有没有人使用TabContainer使用ValidatorCalloutExtenders?
是否值得用ajaxControlToolkit打扰,还是应该重写jQuery而不眨眼? (严肃的问题......这是一个webforms项目,如果ajaxControlToolkit正在使用中,那么很多,但我感到受到限制和反击。)
答案 0 :(得分: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;
}