ASP.NET自定义控件 - PostBack的替代品?

时间:2008-09-16 19:06:25

标签: asp.net postback viewstate custom-server-controls

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

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

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

我在寻找的是:

我们有什么替代方法可以使用PostBack模型来初始化控件?

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

理想情况下,您可以概述一下不同方法的架构/设计以及它的专业/概念。

非常感谢^ _ ^

5 个答案:

答案 0 :(得分:3)

好吧,会话状态是一个服务器端解决方案,如果你想完全避免使用ViewState,它有自己的堆栈来处理。实际上,在自定义控件中使用ViewState一切都很好 - 只是对你存储的东西很挑剔 - 只存储声明控制状态的增量,不存储任何你要回发的东西(例如来自数据库通话)等。

答案 1 :(得分:1)

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

我想你可以使用cookies,但这会非常麻烦。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

如果你真的在寻找PostBack模型的替代品,那么我建议研究ASP.NET MVC框架。我很乐意将WebForms踢到路边并在MVC中完成我的所有工作,但是遗憾的是,遗留代码是tarbaby,重写几乎永远不是答案,所以我插上了......

答案 4 :(得分:0)

我认为你仍然在某种程度上误解了控件。控件只有您在动态添加到页面时描述的问题。如果您在aspx代码中预先声明控件,那么它们将与页面一起构建。