gpt4 book ai didi

c# - 回发后 Listview 未在 databind() 上完全更新

转载 作者:太空狗 更新时间:2023-10-29 22:29:30 25 4
gpt4 key购买 nike

我有一个 ListView 控件,它表现出一种奇怪的行为 - 行在回发后仅部分更新。我希望这里有人可以阐明为什么会发生这种情况。

我的 ListView 数据源绑定(bind)到存储在页面 session 状态中的项目列表。这是有意的,部分是为了超时过时的 View ,因为多个用户查看数据。在普通的度假村操作中,排序是通过 javascript 在页面上处理的,列表/ session 数据顺序通过回调保持同步。回调还检查权限级别。在更复杂的特定度假村操作中,页面上的 javascript 会回发到页面以处理排序逻辑。 List/Session 在回调中被更新,然后 listview 控件被反弹到数据。页面再次加载,行显示新顺序。没问题吧?

问题是 ListView 中的一些 元素没有根据新顺序更改值。虽然在页面上处理的超链接和文本(例如 <%# Eval("ProjectAbbrev") %>)会适当更新,但通过 OnItemDataBound 事件方法设置值的复选框、文字和下拉列表不会 - 它们会保留“卡住”到位,即使单步执行代码表明该方法在回发期间运行,并且控件应该设置为它们的新值。如果我去手动截断列表说,原始大小的一半,肯定只有那些项目被重新填充,但复选框等仍然保留其原始值。

所以我的问题是:为什么这些元素不与回发中的其余 ListView 控件元素一起更新?我感觉我要么误解了 ASP.NET 中的页面生命周期,要么遇到了某种错误。

在这一点上,我想我必须将更复杂的排序操作移动到 javascript 中的页面,但这将是相当棘手的,我想尽可能避免这样做。


更新:我已经尝试将 EnableViewState 设置为 false,但它没有解决这个问题。在任何情况下我都不能使用该策略,因为页面的其他部分(保存)最终依赖于读取 View 状态。
更新:我提供了一些代码片段,希望它们可以阐明这个问题:

Page:HyperLink 元素将在回发后正确更新,但在 OnQueueRepeater_ItemDataBound 方法中分配了值的 CheckBox 将保持不变。

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TextProcessorProjects.ascx.cs" Inherits="ETD.UI.Controls.TextProcessorProjects" %>

<asp:ListView ID="QueueListView" runat="server" OnItemDataBound="OnQueueRepeater_ItemDataBound">
<ItemTemplate>
<tr>
<td><asp:HyperLink runat="server" ID="ProjectIDLink"><%# Eval("ProjectAbbrev") %></asp:HyperLink></td>
<td><asp:CheckBox runat="server" ID="ScannedCheckBox" BorderStyle="None" /></td>
</tr>
</ItemTemplate>
</asp:ListView>

代码隐藏:在回发时,执行以下代码:

protected List<Book> QueueDataItems
{
get { return (List<Book>)Session["Queue"]; }
set { Session["Queue"] = value; }
}

else if (IsPostBack && !Page.IsCallback)
{
// resort QueueDataItems List appropriately
ResortQueue(Request.Params)
// rebind
QueueListView.DataSource = QueueDataItems;
QueueListView.DataBind();
}

protected void OnQueueRepeater_ItemDataBound(object sender, ListViewItemEventArgs e)
{
// ...
// ... other controls set
CheckBox scannedCheckBox = e.Item.FindControl("ScannedCheckBox") as CheckBox;
scannedCheckBox.Checked = book.Scanned;
}

更新:我已经放弃让它工作并使用 javascript 将我的排序逻辑移动到客户端。如果有人对为什么会发生这种奇怪的行为有任何想法,我仍然很想听听他们的意见!

最佳答案

出于兴趣,您在页面上的哪个点进行数据绑定(bind)?页面加载?

在 OnPreRender 上试试 - 可能会有帮助。

关于c# - 回发后 Listview 未在 databind() 上完全更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/821053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com