c# - 维护中继器的 View 状态

标签 c# asp.net repeater viewstate asprepeater

我有一个问题,即中继器的 View 状态,即中继器内的控件没有保持其 View 状态。

我有以下内容:

中继器 1:

<asp:Repeater ID="rptImages" runat="server">
<ItemTemplate>
    <asp:LinkButton Text="Add" CommandName="Add" CommandArgument=<%# Eval("ID") %> runat="server" />
</ItemTemplate>
</asp:Repeater>

单击链接按钮时,CommandArgument 的值存储在页面的隐藏字段中。

在预呈现事件处理程序加载之前,回发时我无法获取隐藏字段的值。因此,在我的预渲染事件中,我获取隐藏字段的值并将其存储在 List 属性中,如下所示:

if (!string.IsNullOrEmpty(this.SelectedImageIDsInput.Text)) {
        this.ImageList.Add(this.SelectedImageIDsInput.Text);
    }

List 属性如下所示:

public List<string> ImageList {
    get {
        if (this.ViewState["ImageList"] == null) {
            this.ViewState["ImageList"] = new List<string>();
        }
        return (List<string>)(this.ViewState["ImageList"]);
    }
    set { this.ViewState["ImageString"] = value; }
}

一旦我将值存储到我的 List 属性中,我就绑定(bind)了我的第二个转发器(同样在预渲染事件中):

this.rptSelectedImages.DataSource = this.LightBoxControl.ImageList;
this.rptSelectedImages.DataBind();

第二个转发器有一个下拉列表和一个文本框。问题是这些子控件的 View 状态没有得到维护。我认为这是因为每次回发时我都会重新绑定(bind)转发器,因此它会被重建。我不知道的是我怎么可能绕过这个? ImageList 属性仅在回发时更新,因此我显然必须在每次回发时重新绑定(bind)转发器 - 还能如何完成?

如有任何帮助,我们将不胜感激。

谢谢 艾尔

最佳答案

如果要重新绑定(bind)中继器,则需要在加载 ViewState 之前在 Init 上执行此操作。

您还应该检查 IsPostback 标志,并且仅在页面未回发时绑定(bind)转发器。

如果你的第二个中继器绑定(bind)在 PreRender 上,则 ViewState 不能用于持久化控件,因为当 ViewState< 时它们根本不存在 已加载 - 在 Init 之后,在 PreLoad 之前。

您需要在每次回发时继续绑定(bind),或者在 Session 中存储或列表,以便您可以访问列表以在 Init 上绑定(bind)一次,(或改变)。

关于c# - 维护中继器的 View 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7416421/

相关文章:

javascript - 如何在asp.net中单击按钮下载html文件?

c# - 从后面的代码返回值到 aspx 页面

c# - 使用多映射 API 时,如果您有 Id“, ”splitOn 以外的键,请确保设置 splitOn 参数与多个关系

C# 测试汇编

c# - 从 3.5 更新到 4.0 时出现 WCF 问题

asp.net - ASP :repeater - headers at section change

c# - 如何安排日期时间列表的特殊表格格式

c# - Asp.net Repeater 在 url img null 进入 db 时隐藏图像控件并显示视频控件,反之亦然

c# - 从 DataReader 解析小数

C#:static object.Equals 如何检查是否相等?