0

わかりました...オンラインで検索し、約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 イベントの前または中に追加されていることを確認してください。

私は何を間違っていますか?

4

1 に答える 1

-1

私は何時間も何時間も何かに取り組んでいるようで、どこかに質問を投稿した直後に (めったにしませんが)、自分の質問に答えます。とても迷惑。

とにかく、私は次のことを行いました(同じ問題を抱えている他の人のために):

次のフィールドを追加しました。

MultiView _profileView;

の内部Page_PreInit():

_profileView = new MultiView();
_profileView.ID = "ProfileView";

そして、 inの後にを追加_profileViewするだけです。buttonPanelforPage_Load

于 2014-12-28T04:15:30.310 に答える