C#ASP.NET-用户控件中的动态MenuItems在控件创建之外被随机复制

本文关键字:控件 创建 随机 复制 MenuItems 用户 NET- 动态 C#ASP | 更新日期: 2023-09-27 18:27:39

EDIT:我需要在返回期间跳过控件创建--请参阅下面的答案

我正在为一个简单的工具开发一个非常基本的前端,我想以一种更有序、更有用的方式呈现一些数据,而不是制作一堵巨大的文本墙。我找到了这个使用MultiView构建简单选项卡界面的教程,但遇到了一个奇怪的问题。我不能使用Ajax选项卡,因为法律对第三方软件的适用性很高。

我的网页是一个基本的ASP.NET页面,中间放置了一个用户控件。在该控件的ascx文件中,我定义了Menu(空)和MultiView(也为空),这样我就可以使用外部文件驱动的内容动态填充选项卡。

当调用默认页面的OnInitComplete函数时,我会调用用户控件来加载数据文件,然后根据加载的数据构建选项卡和视图内容。我尝试从PageLoad、PreInit和CreateChildControls中执行此操作,但我不断收到错误,称我在无效时间设置了MultiView的活动视图索引(而且尽管我只是添加了一堆视图,但仍有0个视图):

ActiveViewIndex正在设置为"0"。它必须小于View控件"0"的当前数目。对于动态添加的视图,请制作确保它们是在Page_PreInit事件之前或中添加的。

但是OnInitComplete看起来工作得很好,所以我就这么做了。

我迭代加载的数据(多个字符串列表),对于每个列表,我将带有列表标题的MenuItem添加到Menu,将View添加到MultiView。视图中填充了一个表->行->单元格,如以上教程中所述。在单元格中,我添加列表标题和绑定到字符串列表的CheckBoxList数据。

到目前为止,一切都很好,但当我点击一个选项卡(或其中一个复选框等),出现回发或类似的情况(网站重新绘制时屏幕会闪烁)时,现在在原始菜单项之后立即出现了一组重复的菜单项。每次单击选项卡或复选框时,都会添加另一组菜单项。

在构建控件之前,我清除MenuItem的Items列表,并在控件构造之后验证控件层次结构的结构是否符合预期。然而,当我的一个回调被调用时,我的MenuItem列表神奇地添加了一些项。我的其他控件似乎都不受影响。作为一个黑客,我可以在菜单的OnMenuItemClick事件中手动删除重复项,但我必须在收到的任何回调中都这样做。显然,我宁愿阻止这种情况的发生。这让我很困惑,我在网上也找不到任何关于它的信息。为什么一组控件有一些内容重复,而其他控件都能正确地保持其状态?我的代码非常简单,所以没有办法在不添加视图的情况下添加其他菜单项。无论如何,在单击选项卡/复选框之前有正确数量的项目,回调中紧接着还有一个附加集合。

这是我第一次使用ASP.NET,所以我边学习边学习。:)谢谢

C#ASP.NET-用户控件中的动态MenuItems在控件创建之外被随机复制

我的问题是在创建控件之前没有测试回发。下面的代码对我有效。

在我的用户控件的代码后面:

protected void OnInitComplete( EventArgs e )
{
    if( !Page.IsPostBack )
    {
        CreateMyControls();
    }
}