Asp.net 选项卡导航-框架还是AJAX?

Asp.net 选项卡导航-框架还是AJAX?,asp.net,ajax,navigation,frames,Asp.net,Ajax,Navigation,Frames,我有一个非常标准的web界面 有4种不同的列表视图(网格控件),可通过顶部的一系列选项卡访问 我已实施了以下措施: 选项卡1将包含网格1的第1页加载到第2帧中,选项卡2将包含网格2的第2页加载到第2帧中,以此类推 但是,这意味着如果您单击网格中的某个项目,我将DetailsPage1.aspx加载到第2帧中,那么第1帧和选项卡仍然可见并处于活动状态 有人建议我应该只使用一个框架,并使用HttpRequest(或asp.net中的WebRequest)根据选项卡单击动态加载页面 这是正确的方法吗

我有一个非常标准的web界面

有4种不同的列表视图(网格控件),可通过顶部的一系列选项卡访问

我已实施了以下措施:

选项卡1将包含网格1的第1页加载到第2帧中,选项卡2将包含网格2的第2页加载到第2帧中,以此类推

但是,这意味着如果您单击网格中的某个项目,我将DetailsPage1.aspx加载到第2帧中,那么第1帧和选项卡仍然可见并处于活动状态

有人建议我应该只使用一个框架,并使用HttpRequest(或asp.net中的WebRequest)根据选项卡单击动态加载页面

这是正确的方法吗?如果您手头有任何资源或提示,将不胜感激


谢谢

框架是蹩脚的:如果用户想要设置书签,如果用户通过谷歌访问您的网站,您将遇到问题:那么您的导航框架将不可见。因此,您需要大量肮脏的javascript。来检查一下。如果您需要javascript,请从一开始就使用AJAX,您是否尝试过使用或加载所有4个详细信息窗格并仅显示/隐藏选项卡选择更改上的面板


根据用户将看到的屏幕,如果动态加载详细视图(Ajax或回发),则可能难以持久保存用户输入的任何信息,并且会导致等待(用户不喜欢等待)

Ajax是最佳选择。但请记住,要使其能够通过后退/前进进行浏览。最好的选择是更改页面哈希。我用了这样的方法:

domain.com/#第一个选项卡的选项卡1 domain.com/#第二个选项卡的选项卡2

等等


如果您使用jQuery,这将是一个很好的开始(我使用它,而且我对它没有任何问题)。我相信对于所有流行的框架都有一个解决方案:)

不要使用框架,而应该在所有其他页面中包含导航页面。浏览器将看到您在所有页面中包含相同的文档并将其缓存。

我建议使用jQuery和jQuery UI插件。不需要框架,只需要div容器。

像StingyJack一样,我建议您查看一下控件,但如果这样做,您可能需要注意ViewState不会变得太大


例如,在查看该选项卡之前,不要将任何内容加载到GridView中,如果没有,则删除该选项卡的内容(如果需要,当然可以保存回数据库。使用TabContainer的ActiveTabChanged事件将是此策略的关键。您可以为网格禁用ViewState,但为容器保留它。

帧是绝对不允许的。使用其他技术无法实现的帧没有任何好处

这是否意味着您必须使用AJAX?不一定。如果您觉得需要提供丰富、无缝的界面,AJAX是一个非常好的解决方案,但严格来说并不是必需的

您可以使用服务器端包含将选项卡分隔为另一个(通用)子页,但由于您提到ASP.NET(假设您运行的是framework v2或更高版本),您可能希望使用母版页,其中选项卡位于一个内容节或母版页中,而网格/详细信息位于另一个内容节中

这两种技术之间的关键区别在于,使用AJAX,从一个选项卡到另一个选项卡的转换将是流畅和无缝的,但是a)这需要一点额外的工作(特别是如果您不熟悉任何给定的AJAX框架)和b)因为您基本上有4个页面合并在一个页面中,这些页面“更重”,维护起来更复杂。如果您选择非AJAX路由,关键的区别在于,当您单击每个选项卡时,会有一个小而明显的刷新效果(因为每次都会加载一个新页面)

当然,母版页对于保持网站风格和结构的一致性非常有用,因此没有理由不能在母版页系统中使用AJAX。

不要使用框架(或iFrame),除非您必须


我能想到的使用(I)帧的唯一有效原因是文件上载控件,事实上,我也不确定它在那里是否有效…

您使用的是ASP.NET,所以只需将所有4个控件加载到一个mutliview中,然后在回发时将可见控件设置为单击过的任何按钮


Hmobius你能再解释一下吗,这可能真的很有用。在ActiveTabChanged事件中,如何禁用网格上的ViewState?例如,如果(tab.index==1){//如何仅禁用gridview1的ViewState}?谢谢选项卡中的每个控件都有EnableViewState=“false”,然后在运行activetabchanged时,任何核心信息(所选内容的键值、排序值等)保存到整个控件的ViewState,并且在将控件填充到新控件之前,从中删除任何lsit项。最后我决定使用母版页—最好利用MS技术。虽然有时候我觉得我这样做是在作弊!我不同意。如果您使用的是ASP.NET,那么iframes可能是使用可编辑控件显示子表单的最佳解决方案,这些控件需要回发事件处理或ASP.NET功能(如视图状态加密)。例如,“我的数据库文档”页面有一个动画菜单,当我单击表、视图或函数名时,它必须加载一个显示对象属性(列、参数等)和可编辑描述字段的ASPX子页面。重新加载新页面会破坏用户体验,使用AJAX会使内容生成和回发处理复杂化。