3

私は可能に違いないと思うことを行う方法を見つけようとしていますが、要点を見逃しているだけです-誰かが私に少しの微調整をしてくれることを願っています:)

私は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 であるため、これは失敗します。

これを回避するには、どのような手法を使用する必要がありますか?

  1. 主キーが含まれる非表示のフィールド (悪用される可能性があり、ページの重みが増すため、理想的ではありません)

  2. インデックスに基づく元のキャッシュ データからの検索 (間違っているようです)

  3. または何か他の/より良い...?

編集:これに回答するために提供できる情報は他にありますか?

4

1 に答える 1

1

DataItem が使用可能な場合、ItemDataBound イベントで HTML 要素に追加の属性を追加してみてください。

ddlSomething.Attributes["Attribute1"] = dataItemObject.PropertyName;

[編集] 属性を使用する以外に、行ごとに、このような JSON オブジェクトを含む配列をレンダリングできます。

var repeaterItemAttributes = [ { Prop1: val1, Prop2: val2, ... }, { ... }, ... ]

したがって、これを使用すると、属性をレンダリングする必要がなくなり、コードも XHTML に準拠します (必須ではありません)。次に、オブジェクト配列をループして、好きなプロパティを読み取ることができます。話していた軽い暗号化をプロパティ値に適用することもできます。[/編集]

于 2009-04-15T04:26:42.913 に答える