リピーターのビューステート、つまりリピーター内のコントロールがビューステートを維持していないという問題があります。
私は次のものを持っています:
リピーター 1:
<asp:Repeater ID="rptImages" runat="server">
<ItemTemplate>
<asp:LinkButton Text="Add" CommandName="Add" CommandArgument=<%# Eval("ID") %> runat="server" />
</ItemTemplate>
</asp:Repeater>
リンク ボタンがクリックされると、CommandArgument の値がページの隠しフィールドに格納されます。
ポストバック時に、prerender イベント ハンドラーが読み込まれるまで、非表示フィールドの値を取得できません。そのため、prerender イベントで非表示フィールドの値を取得し、次のように 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 プロパティに保存したら、2 番目のリピーターをバインドします (ここでも prerender イベント内)。
this.rptSelectedImages.DataSource = this.LightBoxControl.ImageList;
this.rptSelectedImages.DataBind();
2 番目のリピーターには、ドロップダウン リストとテキスト ボックスが含まれています。問題は、これらの子コントロールのビューステートが維持されないことです。ポストバックごとにリピーターを再バインドしているため、再構築されているためだと思います。私が知らないのは、どうすればこれを回避できるのでしょうか? ImageList プロパティはポストバック時にのみ更新されるため、ポストバックごとにリピーターを再バインドする必要があることは明らかです。
どんな助けでも大歓迎です。
ありがとうアル