好吧......在线搜索,大约有100个答案,没有任何工作,所以我显然不理解。
我有一组动态创建的标签。当用户单击其中一个选项卡时,它应该更改为该选项卡及其内容。但是,每次尝试这样做时,都会收到以下错误消息:
ActiveViewIndex被设置为' 0'。它必须小于当前View控件的数量' 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;
我可以单击一个选项卡,它会成功切换,但是当点击另一个选项卡时,它会崩溃并出现如下错误:
ActiveViewIndex被设置为&#39; 2&#39;。它必须小于当前View控件的数量&#39; 0&#39;。对于动态添加的视图,请确保在Page_PreInit事件之前或之中添加它们。
我做错了什么?
答案 0 :(得分:0)
我似乎在做了几个小时和几个小时的工作,然后在我将问题发布到某个地方后(我很少这样做),我回答了我自己的问题。太烦人了。
无论如何,我做了以下事情(对于遇到同样问题的其他人):
添加了以下字段:
MultiView _profileView;
Page_PreInit()
内部:
_profileView = new MultiView();
_profileView.ID = "ProfileView";
然后我只是在_profileView
buttonPanel
之后的for
添加Page_Load
。