Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何以允许触发用户控件事件的方式控制要加载的用户控件_Asp.net_Events_User Controls_Viewstate - Fatal编程技术网

Asp.net 如何以允许触发用户控件事件的方式控制要加载的用户控件

Asp.net 如何以允许触发用户控件事件的方式控制要加载的用户控件,asp.net,events,user-controls,viewstate,Asp.net,Events,User Controls,Viewstate,我根据用户单击的选项卡动态加载许多用户控件中的一个。我将所选选项卡索引存储在视图状态。用户控件上有一个复选框,用于触发OnChanged事件。我的问题是,如果我在Page_load中加载用户控件,复选框事件不会触发,因为控件没有及时创建。如果我在Page_Init中加载用户控件,页面就不知道应该加载哪个用户控件,因为ViewState还没有加载。如何存储要加载的用户控件并触发用户控件上的事件?我发现的最佳策略是在Page_Init事件中创建所有控件,并将它们的Visible属性设置为false(

我根据用户单击的选项卡动态加载许多用户控件中的一个。我将所选选项卡索引存储在视图状态。用户控件上有一个复选框,用于触发OnChanged事件。我的问题是,如果我在Page_load中加载用户控件,复选框事件不会触发,因为控件没有及时创建。如果我在Page_Init中加载用户控件,页面就不知道应该加载哪个用户控件,因为ViewState还没有加载。如何存储要加载的用户控件并触发用户控件上的事件?

我发现的最佳策略是在Page_Init事件中创建所有控件,并将它们的
Visible
属性设置为false(在您的情况下,在Page_load中),如果它们不应该出现在呈现的页面上

编辑


另一个选项是根据某些其他标准(除了ViewState)确定要加载的控件。例如,如果将当前选项卡设为查询字符串参数之一,则在Page_Init期间,该数据将在请求中可用。

我认为这不是我的选项。用户控件非常大,由于性能原因,我将其设置为一次只加载一个。你知道其他策略吗?@StriplingWarrior,为了响应你的编辑,我在回发时加载控件,所以要将选项卡索引放入查询字符串,我必须将页面重定向到自身。由于性能是一个问题,我认为我负担不起另一个页面生命周期。我想用一个隐藏的表单字段来代替。你认为这有什么问题吗?或者你还有其他选择吗?@adam0101:如果你不需要在有人单击选项卡时保留其他页面数据,你可以简单地将选项卡按钮设置为链接,而不是回发按钮。但是,如果您需要为其他页面项目保留viewstate,仍然有多种选项。一个隐藏的字段可能会和任何东西一样有效。顺便说一句,我强烈推荐这篇文章()以帮助避免WebForms中固有的一些性能缺陷。@StriplingWarrior:在评估了一些选项之后,我想我将按照您的第一个建议,根据需要显示和隐藏控件。我将添加一个附加步骤,将任何隐藏控件的数据源绑定到“Nothing”,以控制viewstate大小。谢谢,当然。祝你好运请务必阅读这篇文章,了解保持ViewState受控的其他策略。干杯。我只想补充一点,如果您在包含页面/控件的页面\加载中动态加载复选框事件,您可以触发它。如果它没有开火,那么很可能是其他东西出了问题。我所看到的造成此问题的最常见问题是,每次初始化复选框时,都没有将其id设置为相同的id