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来完成所有工作,但是,遗留代码是一个麻烦,重写几乎绝不是答案,所以我开始...