【发布时间】:2012-12-06 10:05:57
【问题描述】:
我现在浏览了许多论坛来回答一个非常基本的问题,但令我惊讶的是,我找不到大多数网站使用的非常基本的设计的一个很好的例子。我对编程并不陌生,但不久前我用它做了大量工作,而且我对 ASP.NET 完全陌生。我目前正在使用 VS2010 并从头开始构建一个 ASP.NET MVC 3 站点。该网站启用了 AJAX,我目前同时使用根据控件进行左窗格导航和 TabContainer 进行顶部选项卡导航。
到目前为止,所有内容都包含在一个母版页中,基本问题是在左侧/顶部菜单中选择导航链接时,整个页面会重新加载并破坏导航菜单的状态。此外,完全没有必要的闪烁,我认为没有理由重新加载整个页面,我只想更改“主要区域”的内容而不触摸导航菜单。
网站结构目前由<DIV> 元素构成,这使得设计非常简单,CSS 文件的结构提供了极大的灵活性和控制力。根据建议,我想尽我所能避免过时的解决方案,例如 IFrame。我想为如何以现代和灵活的方式完成这项工作奠定基础,并尽可能减少妥协。这一点很重要,因为我启动的系统可能会在通过多个决策论坛后由整个团队共同开发。
正如我所说,我浏览了相当广泛的解决方案,并发现了许多关于母版页概念的解释,这些解释让我可以输入我的问题似乎是什么:我的导航菜单绑定到一个母版页,一个母版页实际上只是一个紧密连接到内容页面的“用户控件”,当我选择导航链接时,这些合并页面会重新加载。这是不应该发生的,这是不可接受的。
我还尝试将导航面板的加载包装在“!IsPostBack”条件下,但我得出的结论是问题不在于 PostBack:s,问题在于单击链接/树链接左侧菜单中的 /accordion 窗格确实请求了一个全新的页面,因此所有内容都重新加载并且以前的状态丢失了。当然,我可以编写代码来存储状态并为“新页面”提供最后的状态,如果没有其他可能,这将是一个解决方案;但我真的不想重新加载整个页面;我只想重新加载“主要区域”以减少带宽需求并避免闪烁。
所以我搜索了只更新“主要内容内容占位符”的方法,我看到很多关于这个主题的问题,但很少有好的答案,尤其是当我想更改主要区域中的整个 aspx 页面时,不是只需更新一些控件(或动态创建新控件/删除旧控件等)。想要改变整个 aspx 页面的原因是不同的页面会提供不同的功能,仅仅通过一些控件的操作是不够的,但主要区域应该加载另一个 aspx 页面——从开发组织的角度来看,这也是很好,因为不同的开发人员可以在完整的应用程序中处理不同的功能领域。
我愿意放弃整个母版页策略,或者使用嵌套母版页,或者将母版页包装在非母版页中,或者使用更新面板,或者使用跨页发布等等。但是我找不到可以作为开始使用的实际可行的示例。
而且,由于目前这基本上只是客户端更新,我真的不明白为什么这会变得如此棘手。
所以,非常简单地说我的问题是:你认为设计一个网站的基本策略是什么,我有导航菜单(顶部和左侧),可以将新的 aspx 页面加载到某个区域(主要区域)并且只更新这个区域而不是整个网站。
如果您能给我提供一些描述,当然最好是一些演示站点,其中只有部分站点更新为新页面,而不是整个页面 - 就这么简单! - 当这将是非常受欢迎的时候。现在花了三天时间浏览一个好的建议,我越来越困惑...... :-(
非常感谢您的指导。
/DT
【问题讨论】:
-
我看到第三个文本块的第一句话有一个丢失的部分:这句话应该说“站点结构当前是用 '' 元素构建的,这使得...... "呃,有短版吗? -_-是的,我只是在一个单独的线程中发出了精髓,在这里重复:“我想设计一个非常标准的网站,用户有机会在导航菜单的帮助下导航到不同的 aspx 页面(左,上)。我不希望在更改内容页面时重新加载整个页面,原因有三个:状态处理、闪烁和带宽节省。我只想将一个新的 aspx 页面加载到“主要内容区域”中网站的其余部分保持不变。实现这一目标的最佳方法是什么?”听起来您使用的是 Webforms 而不是 MVC3,对吗?另外,您使用的是什么版本的 .net?是的,这个测试站点被构建为一个webforms站点是正确的。它应该是 MVC3。但我认为这个问题对双方来说都是相当普遍的,但我可能会严重误会,我还是 ASP.NET 的新手。 .NET 版本应该是 4。
标签: ajax asp.net-mvc navigation