2017-02-17 15 views
0

私は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になります。

+0

ネストされたリピータを使用してみませんか?また、できる場合は、Razorビューエンジンを使用してASP.NET MVCに切り替えることもできます。ここでは、これははるかにクリーンで美しいものです。 – mason

+0

@mason - はい、MVCで動作します。しかし、私は既存のWebフォームアプリケーションに変更をプラグインする必要があります。ネストされたリピータはどうやって動作すると思いますか? – techspider

答えて

0

それは明らかにバインド変数とリピータ内をループにMVCに似ていません。

リピーターにバインド変数がある場合、そのフィールドは、HTMLに存在する条件に関係なく、そのコントロールにバインドされたデータセットに存在すると見なされます。条件の事前検証は行いません。

このシナリオでは、データセットを動的列ではなく複数行に変更し、ネストされたリピータで処理しました。

-1

​​の使用を誤解していると思いますが、この回答を見てwhat is Eval() use forを見つけてください。言っbeign

は、あなたのコードから自分の削除エバール場合、あなたは行くために良いことがあります:

<% for (var index = 1; index < 3; index++) 
{ %> 
    <div style="font-weight: bold"><%= String.Format("v{0}_vendor_name", index.ToString()) %>: </div> 
<% } %> 
+0

これは、静的出力 "v1_vendor_name"、 "v2_vendor_name"などを出力します。実行時に 'Eval(" v1_vendor_name ")'と 'Eval(" v2_vendor_name ")が必要です。自分のバインドされたデータから対応する列の中の値を取得するために列名を 'Eval'に動的に渡す必要があります – techspider

+0

' MyNamespace.Model.Count'に対して 'hard-coded 3 'を変更しようとしましたか? –

+0

あなたのコードの問題は、 '%% String.Format(" v {0} _vendor_name "、index.ToString())%>' – techspider

関連する問題