2008-10-31 45 views
3

我有我认为是一个非常标准的网络接口。标签导航 - 框架还是AJAX?

有4种不同的ListViews(网格控件)可以通过顶部的一系列选项卡访问。

我已经实现此,如下所示:第1页包含网格线1

alt text http://img402.imageshack.us/img402/1530/pagedu8.jpg

标签1将加载到帧2表2将第2页包含网格线2装入帧2等

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

我已经被建议我应该只有一个框架,并使用HttpRequest(或WebRequest在asp.net中)基于标签点击动态加载页面。

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

感谢

回答

4

框架是一个绝对的禁忌。使用其他技术无法实现的画框没有任何好处。

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

您可以使用服务器端包含将您的选项卡分隔成另一个(公共)子页面,但自从您提到ASP.NET(假设您运行的是Framework v2或更高版本),您可能需要使用Master页面,其中您的选项卡位于一个内容部分或主页本身中,并且您的网格/详细信息位于另一个内容部分。

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

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

3

框架是跛脚:你会得到的问题,如果用户要设置书签,如果用户通过谷歌访问您的网站:那么你的导航框架是不可见的。所以你需要很多肮脏的JavaScript。检查这一点。如果你需要JavaScript,从一开始就做,并使用AJAX

1

你试过TabContainer或加载所有4个细节窗格,只显示/隐藏面板选项卡选择更改?

根据您的用户将看到的屏幕,如果您动态加载详细视图(Ajax或回发),您可能无法坚持用户输入的任何信息,并且您将等待(用户不想等待)

2

Ajax是最好的选择。但请记住通过后退/前进使其可以浏览。最好的选择是改变页面散列。我使用的是这样的:

domain.com/#tab1的第一个选项卡 domain.com/#tab2的第二个选项卡

等。

如果你使用jQuery,this可以是一个好的开始(我使用它,我没有问题)。我确信有一个解决方案,但所有流行的框架虽然:)

2

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

1

我会推荐使用jQuery和jQuery UI插件。不需要框架,只需要div容器。

1

和StingyJack一样,我建议看一下TabContainer控件,但是如果你这样做的话,你可能需要注意你的ViewState不会太大。

因此,例如,不要将任何东西加载到GridView中,直到该Tab被查看,并且如果它不是,则删除它的内容(当然,如果需要的话,则保存回数据库使用TabContainer的ActiveTabChanged事件对于这个策略。您为网格禁用ViewState,但将其留在容器中。

+0

Hmobius你能解释一下,这可能是非常有用的。在ActiveTabChanged事件中,如何禁用网格上的ViewState?例如,如果(tab.index == 1){//如何禁用gridview1的ViewState}?谢谢! – Sean 2008-10-31 13:44:56

+0

选项卡中的每个控件都具有EnableViewState =“false”,那么当运行activetabchanged时,任何核心信息(所选任何内容的关键值,排序值等)都将保存到whoel控件的ViewState中,并且之前的任何lsit项目都将被删除在新的控件中填充控件。 – Hmobius 2008-11-06 13:05:55

-1

切勿使用帧(或iFrame为此事),除非你绝对必须 ...我能想到的使用

的唯一有效原因(我)框架实际上是在文件上传控件,并我不知道它在那里是有效的...