私は可能に違いないと思うことを行う方法を見つけようとしていますが、要点を見逃しているだけです-誰かが私に少しの微調整をしてくれることを願っています:)
私はASP.NETでデータバインディングを利用しています(ビューステートがオフになっているので、あちこちでいくつかのコントロールステートを使用しています)、各アイテムテンプレート(repeaterPriceBands)内にリピーターを持つリピーター(repeaterPriceClasses)をレンダリングしています。基本的に、これはテキストから表をレンダリングし、各セルにドロップダウンリストを表示します。
ボタンのイベント ハンドラー内で repeaterOuter を列挙して、値 >0 のドロップダウン リストを取得した元のバインドされたすべての要素のリストと、その値を取得する方法を見つけようとしています。 .
public Dictionary<Price, int> SelectedPrices
{
get
{
var sel = new Dictionary<Price, int>();
foreach(RepeaterItem itemClass in repeaterPriceClasses.Items)
{
var repeaterPriceBands = itemClass.FindControl("repeaterPriceBands") as Repeater;
foreach(RepeaterItem itemBand in repeaterPriceBands.Items)
{
var context = (Price)itemBand.DataItem;
var listQty = itemBand.FindControl("listQty") as DropDownList;
if(listQty.SelectedValue.ToInt32() > 0)
{
sel.Add(context, listQty.SelectedValue.ToInt32());
}
}
}
return sel;
}
}
データバインディングが終了した後、itemBand.DataItem は常に null であるため、これは失敗します。
これを回避するには、どのような手法を使用する必要がありますか?
主キーが含まれる非表示のフィールド (悪用される可能性があり、ページの重みが増すため、理想的ではありません)
インデックスに基づく元のキャッシュ データからの検索 (間違っているようです)
または何か他の/より良い...?
編集:これに回答するために提供できる情報は他にありますか?