私はASP.Net Webフォームに特有のケースがあります。私はリストをループし、コントロールを動的に生成したいリピーターを持っています。ASP.Net Repeaterでループ変数とバインド変数にアクセスするにはどうすればよいですか?
私は<%#
、
<% for (var index = 1; index < MyNamespace.Model.Count; index++)
{ %>
<div style="font-weight: bold"><%# Eval(String.Format("v{0}_vendor_name", index.ToString())) %>: </div>
<% } %>
を使用している場合は、私は私のループインデックス変数評価にアクセスすることはできませんが。私は、ビルドエラーの下に取得する:
The name 'index' doesn't exist in the current context.
私は<%=
、
<% for (var index = 1; index < MyNamespace.Model.Count; index++)
{ %>
<div style="font-weight: bold"><%= Eval(String.Format("v{0}_vendor_name", index.ToString())) %>: </div>
<% } %>
を使用している場合は、私はすべてのビルドエラーを得ることはありませんが、実行時に、私はエラーの下に出る:
Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control.
私はこのフォーラムでいくつかの質問に目を通しましたが、どちらも1つのステートメントで両方のタイプの変数を取得する必要はありません。
私が達成しようとしているものが不思議なら、Repeater
にバインドされたDataTable
にはいくつかの動的列があります。カウントに応じて動的に追加したいと思っています。したがって、2つの列がある場合、私のEvalはv1_vendor_name、v2_vendor_nameを選択する必要があります。
DataTable
には、Repeater
には、v1_vendor_name
,v2_vendor_name
があります。 Eval("v1_vendor_name")
とEval("v2_vendor_name")
の代わりに、Eval
の列が動的に適用されるようにループを使用しようとしています。私は列の数を制御することができないので、これを動的に行う必要があります。それはv10_vendor_name
まで上がる可能性があります。 evalの中
for (this.index = 1; this.index < MyNamespace.Model.Count; this.index++)
{ %>
<div style="font-weight: bold"><%# Eval(String.Format("v{0}_vendor_name", this.index.ToString())) %>: </div>
<% } %>
@twerayにより示唆されるように、私は、背後にあるコードからプロパティを使用してみましたが
、しかし、this.index
はいつも私がループ内で1が割り当てられていても0になります。
ネストされたリピータを使用してみませんか?また、できる場合は、Razorビューエンジンを使用してASP.NET MVCに切り替えることもできます。ここでは、これははるかにクリーンで美しいものです。 – mason
@mason - はい、MVCで動作します。しかし、私は既存のWebフォームアプリケーションに変更をプラグインする必要があります。ネストされたリピータはどうやって動作すると思いますか? – techspider