我正在尝试加载具有标签的部分视图。我正在对控制器进行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,但是标签最终都具有相同的值,即最后一个计数器值。
我错过了什么?
答案 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>
<%});
}