【问题标题】:Repeater User Control and Viewstate中继器用户控制和视图状态
【发布时间】:2011-02-12 17:11:38
【问题描述】:

我在框架 3.5 上维护一个 ASP.NET Web 窗体应用程序。本质上,它是一个项目列表和一个表示项目状态的复选框。用户可以按任意数量的列对项目进行排序。在回发之间添加和删除新项目。此列表托管在中继器中,项目模板是用户控件。该页面没有母版页,因为它是从框架 1.0 升级到 1.1 到 2.0 到 3.5 的应用程序。如果应用程序由 IIS6.1 和 7.5、32 位和 64 位托管,则应用程序会执行此操作。它在自己的应用程序池中,并且该池有 4 个线程。

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

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

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

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

似乎正在 Page_Load 和 LoadComplete 之间加载视图状态。在数据绑定和 LoadComplete 之后检查值显示了这一点。什么会导致视图状态在这样的错误时间加载。感觉是个bug。它只影响应用程序中的一页。我知道视图状态是在初始化之后填充的,并且所有控件都应该在 OnInit 期间加载,但我不想要视图状态,所以这不起作用是可以的。

它与控件的类型无关。我刚刚将 asp:checkbox 换成了 htmlinputcheckbox 并且行为仍然存在。

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

【问题讨论】:

    标签: asp.net-3.5 viewstate repeater


    【解决方案1】:

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

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

    【讨论】:

    • 我有一个类似的情况,其中 LinkBut​​ton + onclick/oncommand 在某些系统上的中继器中不起作用(取决于它们的 .NET 框架版本?),但 Button 在所有系统上都可以正常工作他们
    猜你喜欢
    • 2010-09-25
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    相关资源
    最近更新 更多