Telerik MVC - 不动态加载Tabstrip内容

时间:2011-07-29 03:23:39

标签: c# asp.net asp.net-mvc telerik telerik-mvc

我正在尝试加载具有标签的部分视图。我正在对控制器进行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 个答案:

答案 0 :(得分:3)

这是一个众所周知的问题,因为lambda通过引用而不是值来捕获foo变量。呈现选项卡时,将使用foo的最后一个值。查看this博文,了解更详细的说明。

解决方案是在循环中使用局部变量:

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>
               <%});
}