选择动态的内容ASP.Net
-
02-07-2019 - |
题
什么样的选择,我必须创造有状态的动态内容中的一个ASP.Net 网站?
这是我的情况。我有一个网站,有多个嵌套内容的区域。顶级的行动绑到一个功能领域 Catalog
, Subscriptions
, Settings
.
当你点击功能行动,我想要动态添加内容的具体行动。例如,在目录中被点击,我希望显示一棵树的目录"文件夹",以及一个区域的权利的详细信息。
当一个用户点击在树上,我想要一个方面敏感的详细信息载的详细区域(性或选择管理的文件)。
我开始 UserControls
.他们工作得很好只要我继续装载入页面,从来没有让一个会消失。一旦消失, ViewState
为页炸毁了因为国家树是无效的。
(我没有想要继续装载的东西到我的网页,因为我不想要的答复是太大)
因此,我的下一个办法是更换我的动态地区 IFrames
.然后,而不是一个实例, UserControl
, 我只想改变源于我的 IFrame
.由于内容 IFrames
独立网页我没有遇到任何 ViewState
问题。
但是,我担心 IFrames
可能是一个糟糕的设计的选择,但不完全了解为什么。该网站是不公开,这样的搜索引擎,不是一个令人关切。
所以,最后我的问题。
什么是我的选择对于这种情况?如果我选择阿贾克斯溶液(jQuery),将我们维持我的自己的视图状态?是否有任何其他考虑因素,我应当考虑到?
解决方案
其他一些选择:
- 仅内容是动态的。您在页面上加载了足够的控件来处理任何事情,并且只实际显示您需要的内容。这样可以节省很多视线状态等麻烦,但这意味着您的页面占用空间更大。
- 动态地向页面添加控件。你已经玩过这个了,所以你在这里看到了一些问题。请记住,为回发创建动态控件的位置在Page_Init()事件中,如果您希望它们是有状态的,则需要将该状态保持在某个位置。我推荐一个数据库。 醇>
其他提示
控制是加入动态不再存在视图状态,因此,它并不重要,如果您使用的AJAX或内部框架或什么的。
一个可能的解决办法是重新填充控制在回发。这个问题,是页面的生活周期(简化)为:
- 初始化
- LoadViewState
- 载回发数据
- 呼叫控制的事件负载
- 呼叫负荷事件
- 呼叫控制的事件
- 控制预呈现
- 预呈现
- SaveViewState
- 卸载
这意味着什么的唯一的地方重新加入动态的控制是初始化--否则发布的数据(或视图状态的信息)没有载入的控制。但通常,因为Viewstat/回发数据不可用,然而,在初始化、你的代码没有所需的信息,以找出哪些控制需要加。
唯一的其他工作围绕我已经找到了在这种情况是用一个第3方控制所谓 DynamicControlsPlaceholder.这一工作的很好,持续控制的信息视图状态中。
在特定情况下,它似乎不像有很多选择/情况。是它实际只是为了有所有不同的套管制的网页,并把它们内部的asp:占位的控制,然后设置一个可见,根据是什么选择?
你有很多不同的选择,是的,IFrame是一个糟糕的设计选择。
第一个选项是AJAX解决方案。而且这并不是一个真正的视图状态,只是你在网络服务器上来回传递数据,根据需要动态构建UI。
下一个选项是每次动态添加给定帖子所需的控件。它的工作方式是,在页面生命周期的开始,你需要完全按照上次发送的那样重建页面,然后转储所有不需要的控件,并构建那些想要的
第三种选择是使用母版页。您的顶级内容可以在主页面上,并且可以链接到网站中的各个页面。
我确信有足够的时间,我可以拿出更多,但这3个只是从阅读你的问题出现。
动态控件和viewstate不能很好地混合,如上所述 - 但这是一件好事,因为即使他们为复杂的动态页面做了视图状态也会变得臃肿,性能会降低到零
使用Ajax [我喜欢AJAX PRO,因为它使用起来非常简单]并自己管理页面状态[在会话,数据库表或适用于您的场景的任何内容]。开始这将会有点复杂,但结果将是高效和响应的:每个页面只能更新需要更改的内容,并且您不会一直来回吹出巨大的viewstate字符串