Webフォームを使用してからかなりの時間が経ちましたが、ほとんどの特典を覚えていません。
ボタンとリピーターを持つユーザーコントロールがあり、リピーターのItemTemplateプロパティは別のユーザーコントロールです。
<asp:Button runat="server" ID="btnAdd" CssClass="btn" Text="Add" OnClick="btnAdd_Click"/>
<br/>
<asp:Repeater runat="server" ID="rptrRequests">
<ItemTemplate>
<uc1:ucRequest ID="ucNewRequest" runat="server" />
</ItemTemplate>
</asp:Repeater>
ユーザーが[追加]ボタンをクリックすると、ucRequestの新しいインスタンスがコレクションに追加されるという考え方です。背後にあるコードは次のとおりです。
public partial class ucRequests : UserControl
{
public List<ucRequest> requests
{
get
{
return (from RepeaterItem item in rptrRequests.Items
select (ucRequest) (item.Controls[1])
).ToList();
}
set
{
rptrRequests.DataSource = value;
rptrRequests.DataBind();
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack) return;
requests = new List<ucRequest>();
}
protected void btnAdd_Click(object sender, EventArgs e)
{
var reqs = requests;
reqs.Add(new ucRequest());
requests = reqs;
}
}
何度もグーグルした後、ViewStateがコントロールのキャプチャされたデータをポストバックの間にあるucRequestコントロール内に配置するために、OnInitメソッドでRepeaterをバインドする必要があることを思い出しましたが、そうしようとすると常にItemsコレクションは常に空であるため、Repeaterのコントロールの単一インスタンス。
どうすればこれを行うことができますか?
前もって感謝します。