在深入了解自定义 ASP.NET 控件开发过程中,我显然正在了解 ASP.NET PostBack 模型以及它如何影响控件开发。

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

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

我正在寻找的是:

除了使用 PostBack 模型来初始化控件之外,我们还有什么选择?

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

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

非常感谢^_^

有帮助吗?

解决方案

嗯,Session State 是一个服务器端解决方案,如果您想完全避免使用 ViewState,那么它有自己的一堆麻烦事需要处理。实际上,在自定义控件中使用 ViewState 是很好的 - 只是对存储的内容有所挑剔 - 只存储声明的控件状态的增量,不要存储任何你将在回发时获得的内容(例如来自数据库调用)等。

其他提示

您必须将值存储在某处,因此您只能使用查询字符串和隐藏的表单字段。如果将其与 HTTP 联系起来,基本上就是 GET 或 POST 参数。

我想你可以使用 cookies,但那样会很混乱。

  1. 将对象状态存储在会话上下文中:这会将保存状态的负担从客户端转移到服务器,这 可能 对于小型 Intranet 应用程序来说是可以接受的。对于首都互联网上的网站,这是行不通的;

  2. AJAX-启用您的控制:在这种情况下,只需说明 变化 需要发回。选择正确的框架是关键;看 http://www.asp.net/ajax/ajaxcontroltoolkit/samples/ 官方 MS 方法;还有许多其他的可能性。

如果您确实正在寻找 PostBack 模型的替代方案,那么我建议您研究 ASP.NET MVC 框架。我很想把 WebForms 踢到路边,并在 MVC 中完成我所有的工作,但可惜的是,遗留代码是一个 tarbaby,重写几乎永远不是答案,所以我继续......

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top