У меня есть своеобразный случай в ASP.Net Web Forms. У меня есть повторитель, в котором я хочу прокручивать список и генерировать элементы управления динамически.Как получить доступ к переменной цикла и переменной привязки в репитере ASP.Net?
Если я использую <%#
,
<% for (var index = 1; index < MyNamespace.Model.Count; index++)
{ %>
<div style="font-weight: bold"><%# Eval(String.Format("v{0}_vendor_name", index.ToString())) %>: </div>
<% } %>
я могу получить доступ к Eval, но не мой индексную переменную цикла. Я получаю ниже ошибки сборки:
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
, имеет некоторые динамические столбцы. Я хочу добавить их динамически в зависимости от количества. Итак, мой Eval должен забрать v1_vendor_name, v2_vendor_name, если есть 2 столбца.
У меня есть 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 Form. Как вы думаете, работает ли вложенный репитер? – techspider