我有一个问题,即中继器的视图状态,即中继器内的控件不维护其视图状态。维护中继器的视图状态
我有以下:
中继器1:
<asp:Repeater ID="rptImages" runat="server">
<ItemTemplate>
<asp:LinkButton Text="Add" CommandName="Add" CommandArgument=<%# Eval("ID") %> runat="server" />
</ItemTemplate>
</asp:Repeater>
当链接按钮被点击被存储在页上的隐藏字段的CommandArgument的值。
回发后,我无法获取隐藏字段的值,直到prerender事件处理程序已加载。所以在我的预渲染事件中,我抓住了隐藏字段的值,并将其存储在一个列表属性,像这样:
if (!string.IsNullOrEmpty(this.SelectedImageIDsInput.Text)) {
this.ImageList.Add(this.SelectedImageIDsInput.Text);
}
而且列表属性看起来像这样:
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; }
}
一次,我已经存储值进入我的列表属性绑定我我的第二个中继器(内再次预渲染事件):
this.rptSelectedImages.DataSource = this.LightBoxControl.ImageList;
this.rptSelectedImages.DataBind();
第二个中继器有一个下拉列表,并在其中一个文本框。问题是这些子控件的视图状态不被保留。我认为这是因为在每次回传时我都在重组中继器,因此它被重建。我不知道的是我怎么可能得到这个? ImageList属性仅在回发时更新,所以我显然必须在每次回发时重新绑定中继器 - 还可以做什么?
任何帮助将不胜感激。
感谢 铝
嗨CodeKing。两个问题虽然 - 我不能早在Init事件中获得隐藏字段的值 - 加上ImageList属性只能在回发时更新..... – higgsy
在这种情况下,您需要重新绑定第二个中继器在使用隐藏字段中的值的每个呼叫上。 – TheCodeKing
嗨CodeKing - 多数民众赞成我到底在做什么,虽然不是吗?我误解你的回应。我目前一直等到onprerender获取隐藏字段的值,然后重新绑定中继器 - 与此相关的问题是中继器中的控件的视图状态不会持续回发。 – higgsy