转发器用户控制和Viewstate

时间:2011-02-12 17:11:39

标签: asp.net-3.5 viewstate repeater

我在框架3.5上维护一个ASP.NET Web Forms应用程序。基本上它是一个项目列表和一个表示项目状态的复选框。用户可以通过多个列中的任何一个对项目进行排序。在回发之间添加和删除新项目。此列表托管在Repeater中,项目模板是usercontrol。该页面没有母版页,因为它是从框架1.0升级到1.1到2.0到3.5的应用程序。如果它由IIS6.1和7.5,32位和64位托管,则应用程序执行此操作。它位于自己的应用程序池中,池中有4个线程。

现在出现问题:如果在thrid行中选中了一个复选框,并且数据库中的位置1中的项目被移除,那么它应该向上移动到位置2.它确实向上移动,但是选中的复选框保持在位3.如果行已排序,则所有选中的复选框都保持在其位置,但其余信息将正确排序和显示,包括父标记上的标题。

在用户控件上以及用户控件中的复选框上禁用了Viewstate。在页面指令中禁用页面缓存。转发器在页面加载中绑定。 我检查了转发器中控件的状态,应该在repeater.DataBind和复选框的状态正确后立即检查。这是页面加载事件中的最后一行。使用fiddler我已经验证了渲染的HTML不正确。所以似乎问题出在渲染中的某个地方。

据我所知,这是我能够做到的。该应用程序是关键任务,但这个错误已经存在了很长时间。显然,此复选框的状态并不重要,但由于不断变化的业务需求,这已成为一个问题。

没有搜索出现任何错误。我可以发布代码,但它很长,因为它是大型应用程序的一部分,所以我没有。

似乎在Page_Load和LoadComplete之间加载了viewstate。在数据绑定和LoadComplete之后检查值会显示此信息。什么会导致viewstate像这样在错误的时间加载。感觉像个臭虫。它只影响应用程序中的一个页面。我知道viewstate是在init之后填充的,并且所有控件都应该在OnInit期间加载,但是我不想要viewstate所以这样就可以了。

它与控制类型无关。我刚刚为htmlinputcheckbox交换了asp:复选框,并且行为仍然存在。

编辑:控制状态会与此有关吗?据我所知,它不能被禁用。

1 个答案:

答案 0 :(得分:0)

删除了HtmlInputCheckBox的asp:复选框并遇到同样的问题。我确定问题是特别使用复选框并将其交换为带有伪复选框图像的asp:ImageButton。

我相信,虽然我不确定,但是复选框状态是控制状态的一部分而不是视图状态。对我来说似乎是一个Microsoft Bug,但也许这就是这个控件的设计方式。