入力フィールドが 3 ページある TabContainer があります。各 TabPanel には、一連の ValidatorCalloutExtenders (パネル上のすべてのバリデーターに 1 つ) があります。
ページを検証すると、検証は現在のパネルに対してのみ機能します。すべての非表示の TabPanels について、そのタブが選択されたときに、すべてのバリデータ ツールチップが混乱して表示されます。
1 番目と 2 番目のタブ ページに、おおよそ次のようなボタンを配置しました。
<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が使用されている場合が多いWebフォームプロジェクトですが、私はそれによって制約を受け、反論されていると感じています。)