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

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

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

我正在寻找的是:

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

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

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

非常感谢^ _ ^

===============>>#1 票数:3 已采纳

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

===============>>#2 票数:1

如果您真的在寻找PostBack模型的替代方案,那么我建议您研究ASP.NET MVC框架。 我很乐意将WebForms踢到路边,并用MVC来完成所有工作,但是可惜,遗留代码简直是bab花一现,而改写几乎从来都不是答案,所以我开始...

===============>>#3 票数:1

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

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

===============>>#4 票数:1

  1. 存储你的对象状态的会话上下文:这将转向从客户端保持状态的服务器,这可能是小规模的内部网应用程序可以接受的负担。 对于大写字母I互联网上的网站,此方法无效。

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

===============>>#5 票数:0

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

  ask by Rob Cooper translate from so

未解决问题?本站智能推荐:

2回复

自定义服务器控件中的中继器内的文本框丢失值

我正在开发我的第一个Custom Server Control,它将显示带有文本框的字段列表。 当包含此自定义服务器控件的页面回发时,文本框内的值会丢失,因为转发器已重新绑定,或者视图状态没有保留这些值。 如何使转发器在回发之间保存文本框的值? 干杯!
1回复

ASP.NET StateBag和自定义控件

让我假装由于某种原因我想创建一个派生自Control而不是WebControl的自定义控件。 让我们假设我需要处理属性(即实现IAttributeAccessor),并且我想通过像WebControl一样使用AttributeCollection来实现。 WebControl实现Attr
5回复

如何坚持列表 ASP.NET自定义控件中的属性?

我在自定义控件中有以下属性: 在我的代码隐藏中,我将项目添加到集合中,如... 但是,这些不会在回发中持续存在。 在自定义控件中允许持久性的正确方法是什么?
4回复

Asp.NET自定义服务器控件事件处理程序不会在第二次回发时触发

我正在开发一个继承CompositeControl类的Asp.NET(.NET 3.5)中的自定义服务器控件。 在我的控制范围内,我重写了CreateChildControls()方法,以生成html和Asp.NET服务器控件的混合。 添加的一些Asp.NET控件是LinkButton (每
3回复

在父级中禁用时,如何为子自定义控件启用ViewState?

我正在尝试创建一个自定义控件,即“gridview”,如控件,但特别是对于实现某些自定义接口的业务对象。 在这样做时,我遇到了以下问题。 我有一个控件,我已禁用viewstate(我不想重新启用它),它有一个我想要启用viewstate的子控件。 因为父母被禁用,我似乎无法让子控件
1回复

ASP.NET Server控件-控件之间是否可以共享Viewstate

如果我有一个具有多个子自定义控件的主“复合自定义服务器控件”,则该主控件是否可以与子控件(也是自定义复合服务器控件)共享其视图状态,(所有控件都是复合控件)自定义服务器控件)? 要进一步扩展,请说我有一个Person控件, Address控件, Phone控件和Notes控件。 Addr
3回复

ASP.NET自定义控件:何时调用LoadPostData()?

我开发了一个扩展ListBox的自定义控件。 这个想法是控件“记住”对客户端发生的元素的修改,例如由于AJAX请求。 它的工作方式是控件还呈现隐藏的输入,并且AJAX请求的结果存储在隐藏的输入中。 这是回发的,控件的LoadPostData()方法查找隐藏的输入,如果隐藏的输入有数据,
1回复

处理click事件自定义服务器控件

我有图像按钮的控制权: 当我点击按钮时Click事件不会触发。
1回复

在同一页面中的上一个回发完成后如何提高回发

我的页面上有一个Treeview控件。 我在选择任何节点或扩展任何根节点时都启用了回发功能。现在我的问题是,当我选择根节点时,它会同时被选中和扩展(即成为根节点),因此两次回发都应该发生。 但是问题是,第二个回发在第一个回发之前完成,因此它中止了第一个。 因此,最终只有一个回发(即第二个)
2回复

使用自定义WebControl作为Panel的DefaultButton

我创建了一个自定义Web控件,用作带图像的按钮。 我希望能够将其设置为ASP.NET Panel控件的DefaultButton参数的目标。 我已经实现了IButton接口,使用控件加载页面时不会产生错误。 但是,当我在该面板中的文本框中按Enter键时,不会引发控件的Click事件。