【问题标题】:ASP.Net Web Forms state management advice needed需要 ASP.Net Web 窗体状态管理建议
【发布时间】:2011-12-15 04:34:34
【问题描述】:

在 VS 2010 中,ASP.Net Web 应用程序模板创建一个包含两个内容页面的母版页:主页和关于。当您导航到新选项卡时,状态会丢失。作为一名 Windows 开发人员,我正在努力解决如何将页面返回到用户离开它们的状态。

我的客户选项卡允许用户过滤客户并从 AspxGridView 中选择一个。选定的客户 ID 将用于其他页面(选项卡)以显示相关的客户数据:联系人、发票、任务等。我想让用户在他/她离开过滤器时返回到客户选项卡,排序等仍在进行中。

我知道 cookie、查询字符串、视图状态和会话变量。但是,当用户离开时,我不知道如何从 DevExpress AspxGridView 捕获用户的过滤器和排序信息,我需要重新构建网格状态。

我是否应该将应用重新设计为一个包含每个选项卡的大页面?这将有助于维护视图状态,但它可能会失控。我的公司希望这个应用程序成为一个成熟的 CRM,我不想制造维护噩梦。

我正在寻找有关如何最好地维护 ASP.Net Web 表单应用程序中的选项卡/页面状态的建议,该应用程序可能会随着时间的推移而变得非常大。

【问题讨论】:

  • AspxGridView 是否支持 cookie?这将是要走的路,大多数数据网格都会有它。
  • 这是一个很难回答的问题,因为有几种方法可以给这只猫剥皮。在您的网格示例中,您可以在用户交互时将状态持久保存到临时 cookie 或 AJAX POST 值回服务器。两者都有相同的效果..
  • AspxGridView 功能齐全,对于像我这样的新用户来说是一个挑战。我将研究 cookie 支持。我刚刚学会了如何保存/恢复布局。现在我需要弄清楚如何跟踪用户应用的过滤器和排序。

标签: asp.net webforms devexpress state-management


【解决方案1】:

但是,当用户离开时,我不知道如何从 DevExpress AspxGridView 捕获用户的过滤器和排序信息,我需要重新构建网格状态。

可以使用 ASPxGridView 客户端布局数据。 DX ASP.NET 网格控件为此提供了特殊的基础结构:

ASPxGridView > 主要功能 > 保存和恢复布局:

http://help.devexpress.com/#AspNet/CustomDocument4342

E2534 - 如何保存/加载 ASPxGridView 的 ClientLayout 数据并从 ASPxListBox 中选择它们:

http://www.devexpress.com/Support/Center/e/E2534.aspx

【讨论】:

  • 就是这样!术语 RestoreUserLayout... 具有误导性。过滤、排序、分组也恢复了。对于我的问题的另一部分,我想知道“最佳实践”设计是包含多个标签的一页还是每个标签一页?
  • 您可以随时获得 DX 团队的帮助devexpress.com/Support/Center/Issues/…
【解决方案2】:

与 WinForms 不同,Web 是无状态的。 ASP.NET 为您提供了一些选项来维护页面和回发之间的状态。一个很好的起点是 MSDN。

ASP.NET State Management Overview

How to: Pass Values Between ASP.NET Web Pages

我不熟悉 AspxGridView,但大多数服务器控件使用 ViewState 来维护回发之间的状态。您可以首先确认在 controlpage 和 web.config 上启用了 ViewState。

【讨论】:

  • 谢谢。一位同事建议我将所有标签保留在一页中。然后更改选项卡将回发到同一页面,从而实现更简单的 ViewState 状态管理。对于一个有很多标签的大型应用来说,这是一个坏主意吗?
  • 我不建议每页加载多个标签,除非标签中的内容很少。仅加载/显示当前视图绝对需要的内容。否则,您将引入大量不必要的 http(可能还有数据库)流量。如果您需要在选项卡之间保持状态,请使用 SessionState 或数据库后端。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
相关资源
最近更新 更多