わかりました...オンラインで検索し、約100の回答をたどりましたが、何も機能していないため、明らかに何かを理解していません。
動的に作成される一連のタブがあります。ユーザーがいずれかのタブをクリックすると、そのタブとそのコンテンツに変更されます。ただし、そうしようとするたびに、次のエラーメッセージが表示されます。
ActiveViewIndex が「0」に設定されています。ビュー コントロールの現在の数 '0' よりも小さくする必要があります。動的に追加されたビューの場合、それらが Page_PreInit イベントの前または中に追加されていることを確認してください。
ASP.NET コードは次のとおりです。
<table width="90%" align="center">
<tr>
<td>
<asp:Panel ID="buttonPanel" runat="server" />
<asp:MultiView ID="ProfileView" runat="server">
</asp:MultiView>
</td>
</tr>
</table>
C# コードは次のとおりです。
Button[] _tabs; //tabs for the profile
View[] _views; //views inside of the MainView
string[] _tabTitles = { "Main", "Website Stats", "About", "Other",
"Wall", "Posts", "Topics", "Pictures" };
protected void Page_PreInit(object sender, EventArgs e)
{
CreateTabs();
}
protected void Page_Load(object sender, EventArgs e)
{
for (int i = 0; i < _tabs.Length; i++)
{
buttonPanel.Controls.Add(_tabs[i]);
ProfileView.Controls.Add(_views[i]);
}
_tabs[0].CssClass = "Clicked";
ProfileView.ActiveViewIndex = 0;
}
protected void CreateTabs()
{
_tabs = new Button[_tabTitles.Length];
_views = new View[_tabTitles.Length];
for (int i = 0; i < _tabs.Length; i++)
{
_views[i] = new View();
_views[i].ID = _tabTitles[i] + "View";
_tabs[i] = new Button();
_tabs[i].CssClass = "Initial";
_tabs[i].BorderStyle = BorderStyle.None;
_tabs[i].Text = _tabTitles[i];
_tabs[i].Click += TabClick;
}
}
protected void TabClick(object sender, EventArgs e)
{
for (int i = 0; i < _tabs.Length; i++)
{
if ((sender as Button) == _tabs[i])
{
_tabs[i].CssClass = "Clicked";
ProfileView.ActiveViewIndex = i;
}
else
_tabs[i].CssClass = "Initial";
}
}
私はデバッグを行い、TabClick が呼び出されているかどうかを確認しようとしましたが、そこに到達する前にページがクラッシュしたようです。私がコメントアウトした場合:
ProfileView.ActiveViewIndex = 0;
1 つのタブをクリックすると正常に切り替わりますが、別のタブをクリックすると次のようなエラーでクラッシュします。
ActiveViewIndex は「2」に設定されています。ビュー コントロールの現在の数 '0' よりも小さくする必要があります。動的に追加されたビューの場合、それらが Page_PreInit イベントの前または中に追加されていることを確認してください。
私は何を間違っていますか?