Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 关于为WebMatrix使用循环帮助器的教程_Asp.net_Nuget - Fatal编程技术网

Asp.net 关于为WebMatrix使用循环帮助器的教程

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

我刚听说Nuget软件包。不幸的是,我似乎找不到任何文档或项目站点。有没有人知道如何使用它或者项目站点在哪里?

我认为提供的示例几乎涵盖了您需要知道的所有内容,循环跟踪器并不像您想象的那么神秘

所有
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