5

在深入自定义 ASP.NET 控件开发的旅程中,我显然对 ASP.NET PostBack 模型及其对控件开发的影响有所了解。

我知道控件在 ASP.NET 中没有“生命周期”,因此必须在每次加载页面时重新初始化。我们通过将对象值/参数持久化到 ViewState 来克服这个问题。

因此,我阅读的许多文章都建议不要使用 PostBack,因为这会给页面增加相当大的开销。我不是在寻找如何禁用它,我知道。

我正在寻找的是:

除了使用 PostBack 模型来初始化控件之外,我们还有哪些替代方法?

我知道我们可以使用 QueryString,但这看起来非常混乱,而且显然不可靠。

理想情况下,您可以给我一个不同方法的架构/设计的概述以及它的优点/缺点。

非常感谢^_^

4

5 回答 5

3

好吧,Session State 是一个服务器端解决方案,如果你想完全避免 ViewState,它有自己的一堆麻烦要处理。但实际上,在自定义控件中使用 ViewState 一切都很好——只是对你存储的内容挑剔——只存储声明的控件状态的增量,不要存储任何你将在回发时得到的东西(例如从DB调用)等。

于 2008-09-16T19:10:58.180 回答
1

您必须将值存储在某处,因此您仅限于查询字符串和隐藏的表单字段。如果您将其与 HTTP 相关联,则基本上它是 GET 或 POST 参数。

我想你可以使用 cookie,但这会很麻烦。

于 2008-09-16T19:12:06.633 回答
1
  1. 将对象状态存储在会话上下文中:这会将保持状态的负担从客户端转移到服务器,这对于小型 Intranet 应用程序来说可能是可以接受的。对于首都 I 互联网上的站点,这将不起作用;

  2. AJAX 启用您的控件:在这种情况下,只需要回发状态更改。选择正确的框架是关键;有关官方 MS 方法,请参见http://www.asp.net/ajax/ajaxcontroltoolkit/samples/;许多其他的都是可能的。

于 2008-09-16T19:12:16.537 回答
1

如果您真的完全在寻找 PostBack 模型的替代品,那么我建议您研究 ASP.NET MVC 框架。我很想把 WebForms 踢到路边并在 MVC 中做我所有的事情,但是,唉,遗留代码是一个 tarbaby,重写几乎永远不是答案,所以我继续插入......

于 2008-10-25T06:06:14.713 回答
0

我认为您仍然对控件有一些误解。控件只有在您将它们动态添加到页面时才会出现您描述的问题。如果您在 aspx 代码中预先声明您的控件,那么它们将与页面一起构建。

于 2008-09-16T19:13:10.857 回答