これにはかなり簡単な解決策があります。ユーザーが入力したデータを一時的に保持する何らかの形式の View Model があると仮定すると、リピーターがデータソースとして使用するコレクションに「空白の」ViewModel を追加するだけです。保存時に、View Model に存在するデータベースへのすべての変更を簡単に保存できます。考えられる例は次のとおりです。
protected void btnAdd_OnCommand(object sender, EventArgs e)
{
List<Item> items = (List<Item>)this.ItemRepeater.DataSource;
items.Add(new Item() { Id = -1 });
this.ItemRepeater.DataBind();
}
protected void btnSave_OnCommand(object sender, EventArgs e)
{
List<Item> items = (List<Item>)this.ItemRepeater.DataSource;
foreach (Item itm in items)
{
if (itm.Id == -1)
{
//Save New Item
}
else
{
//Update existing item
}
}
}
ここでの主な注意点は、ユーザーが行った変更 (保持/表示したい) で更新された View Models を使用して、ItemRepeater のデータソースを再設定する必要があることです。