これは非常に奇妙ですが、アクティブなタブが変更された場合、または実際のActiveTabIndexプロパティ値が0に等しい場合、TabContainerは各ポストバックでActiveTabChangedイベントを発生させます。そのような動作の理由を見つけることができないため、自己責任で以下のソリューションを使用してください。実際に利用できるソリューションは2つあります。1つはAjaxControlToolkitソースをダウンロードし、TabContainerコントロールのLoadPostDataメソッドを変更し、カスタムdllを使用することです。
実際の方法:
protected override bool LoadPostData(string postDataKey, NameValueCollection postCollection)
{
int tabIndex = ActiveTabIndex;
bool result = base.LoadPostData(postDataKey, postCollection);
if (ActiveTabIndex == 0 || tabIndex != ActiveTabIndex)
{
return true;
}
return result;
}
ActiveTabIndex == 0
上記のコードから条件を削除するだけです。
または、TabContainerから継承された独自のクラスを作成し、そのメソッドをオーバーライドして、デフォルトの代わりにこのクラスを使用することもできます。
namespace AjaxControlToolkit
{
/// <summary>
/// Summary description for MyTabContainer
/// </summary>
public class MyTabContainer : TabContainer
{
protected override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
{
int tabIndex = ActiveTabIndex;
if (SupportsClientState)
{
string clientState = postCollection[ClientStateFieldID];
if (!string.IsNullOrEmpty(clientState))
{
LoadClientState(clientState);
}
}
if (tabIndex != ActiveTabIndex)
{
return true;
}
return false;
}
}
}