关于ASP.NET自定义控件:ASP.NET自定义控件-回发的替代方法?

关于ASP.NET自定义控件:ASP.NET自定义控件-回发的替代方法?

ASP.NET Custom Controls - Alternatives to PostBack?

在深入研究自定义ASP.NET控件开发的过程中,我显然会绕过ASP.NET PostBack模型及其对控件开发的影响。

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

因此,我阅读的许多文章建议不要使用PostBack,因为这可能会增加Page的开销。 我不知道如何禁用它,我知道。

我正在寻找的是:

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

我知道我们可以使用QueryString,但这似乎很混乱,而且显然不可靠。

理想情况下,您可以给我概述另一种方法的体系结构/设计以及该方法的优点/缺点。

非常感谢^ _ ^


好吧,会话状态是服务器端的解决方案,如果您要完全避免使用ViewState,则需要处理大量的事务。确实,在自定义控件中使用ViewState很好-只需对存储的内容保持谨慎-仅存储声明的控件状态中的增量,无论如何都不要存储任何要回发的内容(例如,从DB调用)等


如果您真的在寻找PostBack模型的替代方案,那么我建议您研究ASP.NET MVC框架。我很乐意将WebForms踢到路边,并用MVC来完成所有工作,但是,遗留代码是一个麻烦,重写几乎绝不是解决办法,因此我开始使用...


  • 将对象状态存储在会话上下文中:这将把保持状态的负担从客户端转移到服务器,这对于小型Intranet应用程序是可以接受的。对于大写字母I互联网上的网站,此方法无效。

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


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

    我想您可以使用Cookie,但这确实很麻烦。


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


    推荐阅读