Telerik MVC - не загружать содержимое вкладок динамически - PullRequest
1 голос
/ 29 июля 2011

Я пытаюсь загрузить частичное представление, которое имеет вкладку.Я делаю jQuery AJAX вызов контроллера, который возвращает частичное представление, которое содержит полосу вкладок.Я полагаю, что все Telerik JS загружаются правильно.

Вот части частичного представления:

        <% Html.Telerik().TabStrip()
        .Name("TabStrip")
        .Items(tabstrip =>
        {
            foreach (FooType foo in Model.Section) {
                tabstrip.Add()
                    .Text(foo.Name.ToString())
                    .Content(() =>
                    {%>
                        <div><%= foo.bar.ToString() %></div>
                    <%});
            }
        })
        .SelectedIndex(0)
        .Render();
         %>

Проблема в том, что у одного и того же контента, несмотря ни на что.Это всегда последний элемент из Model.Section.Тем не менее, текст вкладки выводится правильно.

Я пытался заменить foo.bar.ToString на счетчик, который увеличивается на каждой итерации, но в итоге все вкладки имеют одинаковое значение, последний счетчикзначение.

Чего мне не хватает?

1 Ответ

3 голосов
/ 30 июля 2011

Это хорошо известная проблема, вызванная лямбда-захватом переменной foo по ссылке, а не по значению.Когда визуализируются вкладки, будет использовано последнее значение foo.Проверьте это сообщение в блоге для более подробного объяснения.

Решение состоит в том, чтобы использовать локальную переменную внутри цикла:

foreach (FooType foo in Model.Section) {
      var bar = foo.bar.ToString();
      tabstrip.Add()
              .Text(foo.Name.ToString())
              .Content(() => /* use the local variable in the lambda */
               {%>
                   <div><%= bar %></div>
               <%});
}
...