什么样的选择,我必须创造有状态的动态内容中的一个ASP.Net 网站?

这是我的情况。我有一个网站,有多个嵌套内容的区域。顶级的行动绑到一个功能领域 Catalog, Subscriptions, Settings.

当你点击功能行动,我想要动态添加内容的具体行动。例如,在目录中被点击,我希望显示一棵树的目录"文件夹",以及一个区域的权利的详细信息。

当一个用户点击在树上,我想要一个方面敏感的详细信息载的详细区域(性或选择管理的文件)。


我开始 UserControls.他们工作得很好只要我继续装载入页面,从来没有让一个会消失。一旦消失, ViewState 为页炸毁了因为国家树是无效的。

(我没有想要继续装载的东西到我的网页,因为我不想要的答复是太大)

因此,我的下一个办法是更换我的动态地区 IFrames.然后,而不是一个实例, UserControl, 我只想改变源于我的 IFrame.由于内容 IFrames 独立网页我没有遇到任何 ViewState 问题。

但是,我担心 IFrames 可能是一个糟糕的设计的选择,但不完全了解为什么。该网站是不公开,这样的搜索引擎,不是一个令人关切。


所以,最后我的问题。

什么是我的选择对于这种情况?如果我选择阿贾克斯溶液(jQuery),将我们维持我的自己的视图状态?是否有任何其他考虑因素,我应当考虑到?

有帮助吗?

解决方案

其他一些选择:

  1. 内容是动态的。您在页面上加载了足够的控件来处理任何事情,并且只实际显示您需要的内容。这样可以节省很多视线状态等麻烦,但这意味着您的页面占用空间更大。
  2. 动态地向页面添加控件。你已经玩过这个了,所以你在这里看到了一些问题。请记住,为回发创建动态控件的位置在Page_Init()事件中,如果您希望它们是有状态的,则需要将该状态保持在某个位置。我推荐一个数据库。

其他提示

控制是加入动态不再存在视图状态,因此,它并不重要,如果您使用的AJAX或内部框架或什么的。

一个可能的解决办法是重新填充控制在回发。这个问题,是页面的生活周期(简化)为:

  1. 初始化
    • LoadViewState
    • 载回发数据
    • 呼叫控制的事件负载
    • 呼叫负荷事件
    • 呼叫控制的事件
    • 控制预呈现
    • 预呈现
    • SaveViewState
    • 卸载

这意味着什么的唯一的地方重新加入动态的控制是初始化--否则发布的数据(或视图状态的信息)没有载入的控制。但通常,因为Viewstat/回发数据不可用,然而,在初始化、你的代码没有所需的信息,以找出哪些控制需要加。

唯一的其他工作围绕我已经找到了在这种情况是用一个第3方控制所谓 DynamicControlsPlaceholder.这一工作的很好,持续控制的信息视图状态中。


在特定情况下,它似乎不像有很多选择/情况。是它实际只是为了有所有不同的套管制的网页,并把它们内部的asp:占位的控制,然后设置一个可见,根据是什么选择?

你有很多不同的选择,是的,IFrame是一个糟糕的设计选择。

第一个选项是AJAX解决方案。而且这并不是一个真正的视图状态,只是你在网络服务器上来回传递数据,根据需要动态构建UI。

下一个选项是每次动态添加给定帖子所需的控件。它的工作方式是,在页面生命周期的开始,你需要完全按照上次发送的那样重建页面,然后转储所有不需要的控件,并构建那些想要的

第三种选择是使用母版页。您的顶级内容可以在主页面上,并且可以链接到网站中的各个页面。

我确信有足够的时间,我可以拿出更多,但这3个只是从阅读你的问题出现。

动态控件和viewstate不能很好地混合,如上所述 - 但这是一件好事,因为即使他们为复杂的动态页面做了视图状态也会变得臃肿,性能会降低到零

使用Ajax [我喜欢AJAX PRO,因为它使用起来非常简单]并自己管理页面状态[在会话,数据库表或适用于您的场景的任何内容]。开始这将会有点复杂,但结果将是高效和响应的:每个页面只能更新需要更改的内容,并且您不会一直来回吹出巨大的viewstate字符串

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top