我在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.
我已經看過這個論壇上的一些問題,但他們都沒有要求在一個語句中獲取這兩種類型的變量。
如果你想知道我在努力達到什麼目的,我的DataTable
綁定到這個Repeater
有一些動態列。我想根據計數動態添加它們。所以,如果有2列,我的Eval應該選擇v1_vendor_name,v2_vendor_name。
我有v1_vendor_name
,v2_vendor_name
在DataTable
綁定到這個Repeater
;而不是使用Eval("v1_vendor_name")
和Eval("v2_vendor_name")
,我試圖使用循環,因此Eval
中的列是動態應用的。我必須動態執行此操作,因爲我無法控制列的數量。它可能高達v10_vendor_name
。
我已經使用屬性從後面的代碼試圖通過@tweray的建議,
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>
<% } %>
但是,this.index
在EVAL始終以0即使我在循環分配1。
爲什麼不使用嵌套中繼器?或者,如果你能夠,切換到ASP.NET MVC的Razor視圖引擎,這是更清潔和漂亮的外觀。 – mason
@mason - 是的,它適用於MVC。但是,我必須插入對現有Web窗體應用程序的更改。你如何看待嵌入式中繼器的工作原理? – techspider