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

时间:2020-03-05 18:56:53  来源:igfitidea点击:

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

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

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

我正在寻找的是:

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

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

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

非常感谢^ _ ^

解决方案

回答

好吧,会话状态是服务器端的解决方案,如果我们要完全避免使用ViewState,则需要处理大量事务。实际上,尽管在自定义控件中使用ViewState很好,但是请谨慎选择仅存储声明的控件状态中的增量,而不存储任何我们将要回发的内容(例如,从数据库调用中) ), 等等。

回答

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

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

回答

  • 将对象状态存储在会话上下文中:这将把保持状态的负担从客户端转移到服务器,这对于小型Intranet应用程序可能是可以接受的。对于大写字母I互联网上的网站,这将无效。
  • 启用AJAX控件:在这种情况下,只需要回发状态更改。在这里选择正确的框架是关键。有关官方的MS方法,请参见http://www.asp.net/ajax/ajaxcontroltoolkit/samples/;还有许多其他可能。

回答

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

回答

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