リピータのビューステート、つまりリピータ内のコントロールがビューステートを維持していないという問題があります。私は、次のしているリピータのビューステートの維持
:
リピータ1:リンクボタンがクリックされると
<asp:Repeater ID="rptImages" runat="server">
<ItemTemplate>
<asp:LinkButton Text="Add" CommandName="Add" CommandArgument=<%# Eval("ID") %> runat="server" />
</ItemTemplate>
</asp:Repeater>
をCommandArgumentの値は、ページ上の隠しフィールドに格納されています。
ポストバック時に、プリレンダーイベントハンドラがロードされるまで、非表示フィールドの値を取得できません。私が保存されたら
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; }
}
:
if (!string.IsNullOrEmpty(this.SelectedImageIDsInput.Text)) {
this.ImageList.Add(this.SelectedImageIDsInput.Text);
}
とリストプロパティので、次のようになりますので、はのようなので、私のPreRenderイベントで、私は隠しフィールドの値を取得し、Listプロパティに格納します私のリストのプロパティに値が、私は(再びPreRenderイベント内で)私の第二の中継をバインド:
this.rptSelectedImages.DataSource = this.LightBoxControl.ImageList;
this.rptSelectedImages.DataBind();
二リピータは、その中のドロップダウンリストとテキストボックスがあります。問題は、これらの子コントロールのビューステートが維持されていないことです。それぞれのポストバックでリピータを再バインドしているため、再構築されていると推測します。私が知らないことは、どうすればこれを得ることができるのだろうか? ImageListプロパティはポストバック時にのみ更新されるので、明らかにそれぞれのポストバックでリピータを再バインドする必要があります。それ以外の方法は可能ですか?
ご協力いただければ幸いです。
おかげ アル
こんにちはCodeKing:あなたはあなたにこのような
LinkButton
をClick
イベントを処理することができます。 2つの問題があります - 私はInitイベントのように早く隠されたフィールドの価値を得ることができません。さらに、ImageListプロパティはポストバックでしか更新できません..... – higgsyその場合、2番目のリピータを再バインドする必要があります隠しフィールドの値を使用してすべての呼び出しで。 – TheCodeKing
こんにちはCodeKing - まさに私がやっていることはそれではありませんか?私はあなたの反応を誤解しています。私は現在、onprerenderが隠しフィールドの値を取得し、リピータを再バインドするまで待つ - この問題は、リピータのコントロールのviewstateがポストバックを超えて保持されない... – higgsy