Asp.net 关于为WebMatrix使用循环帮助器的教程
我刚听说Nuget软件包。不幸的是,我似乎找不到任何文档或项目站点。有没有人知道如何使用它或者项目站点在哪里?我认为提供的示例几乎涵盖了您需要知道的所有内容,循环跟踪器并不像您想象的那么神秘 所有Asp.net 关于为WebMatrix使用循环帮助器的教程,asp.net,nuget,Asp.net,Nuget,我刚听说Nuget软件包。不幸的是,我似乎找不到任何文档或项目站点。有没有人知道如何使用它或者项目站点在哪里?我认为提供的示例几乎涵盖了您需要知道的所有内容,循环跟踪器并不像您想象的那么神秘 所有Loop.OuterLoop所做的都是引用父循环(如果您在一个循环中并且正在跟踪它),例如: @{ int[] outerThings = new int[] {1,2,3,4}; var innerThings = new[] {"a","b","c", "d"}; foreach (i
Loop.OuterLoop
所做的都是引用父循环(如果您在一个循环中并且正在跟踪它),例如:
@{
int[] outerThings = new int[] {1,2,3,4};
var innerThings = new[] {"a","b","c", "d"};
foreach (int outerThing in outerThings.Track())
{
<li>@outerThing
@foreach(var innerThing in innerThings.Track())
{
<li>---->@innerThing
@if (Loop.OuterLoop.First)
{
<strong>Start of outer loop (index is: @Loop.OuterLoop.Index)</strong>
}
@if (Loop.OuterLoop.Last)
{
<strong>end of outer loop (index is: @Loop.OuterLoop.Index)</strong>
}
</li>
}
</li>
}
}
跟踪外部环路并不完全困难。助手将其状态存储在Context.Items中,以确保请求级别的隔离。每次跟踪新循环时,它都会检查Context.Items中是否已经存在值,并将其作为OuterLoop属性分配给新循环。当枚举数被释放时,Context.Items中的值被设置为OuterLoop,从而有效地弹出当前循环
foo.Track()
fooWrapper.OuterLoop = Content.Items["Loop"] // null at this point.
Context.Items["Loop"] = fooWrapper
bar.Track()
barWrapper.OuterLoop = Content.Items["Loop"] // fooWrapper
Context.Items["Loop"] = barWrapper
bar.Dispose()
Context.Items["Loop"] = barWrapper.OuterLoop // Current in fooWraper
这意味着您可以有任何深度的循环,包括跨页面的循环,并且仍然可以工作
请注意,助手在多线程场景中不起作用,如果您未能处理枚举器,它可能会工作不稳定 FWIW我看到了它添加到项目中的cshtml文件,但它们并没有真正讨论关于
循环的任何内容。OuterLoop
如果有第三个循环,它会发生什么,它只是爆炸?@chris-我添加了另一个使用三个嵌套循环的示例。您只需通过添加额外的OuterLoop
从内部循环引用外部循环,例如loop.OuterLoop.OuterLoop
尽管如此,我打赌编程该属性并不有趣。您在处理枚举器时提出的语句让我感到困惑,没有一个代码示例显示处理枚举器。还有,Wrap()
来自哪里?@Chris My bad,我本想说Track,但却写了Wrap。我在回答中改变了这一点。此外,IEnumerator实现IDisposable,如果使用常规的foreach(),编译器将确保正确地释放它。如果您选择自己迭代枚举器,则需要担心调用Dispose。变量枚举器=myEnumerable.GetEnumerator()。。。
foo.Track()
fooWrapper.OuterLoop = Content.Items["Loop"] // null at this point.
Context.Items["Loop"] = fooWrapper
bar.Track()
barWrapper.OuterLoop = Content.Items["Loop"] // fooWrapper
Context.Items["Loop"] = barWrapper
bar.Dispose()
Context.Items["Loop"] = barWrapper.OuterLoop // Current in fooWraper