使用Loop Helper for WebMatrix的教程

时间:2011-05-11 18:33:45

标签: asp.net nuget

我刚刚了解了Nuget包Loop Helper for WebMatrix。不幸的是,我似乎无法找到任何文档或项目网站。有没有人知道如何使用这个或项目网站的位置?

2 个答案:

答案 0 :(得分:1)

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

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

在bonnet下,帮助程序只是对数组,列表和集合进行包装访问,并使用递增的内部索引值跟踪这些项目的向前移动。

<强>更新

这是一个使用三个嵌套循环的示例,其中内部循环引用最外层循环(outerThings):

@{
  int[] outerThings = new int[] {1,2,3,4};
  var middleThings = new[] { "A", "B", "C", "D" };
  var innerThings = new[] { "a", "b", "c", "d" };

  foreach (int outerThing in outerThings.Track())
  {
    <li>@outerThing

    @foreach(var middleThing in middleThings.Track())
    {
      <li>---->@middleThing

      @foreach(var innerThing in innerThings.Track())
      {
        <li>-----+---->@innerThing

        @if (Loop.OuterLoop.OuterLoop.First)
        {
          <strong>
            Start of outerThing loop (index is: @Loop.OuterLoop.OuterLoop.Index)
          </strong>  
        }

        @if (Loop.OuterLoop.OuterLoop.Last)
        {
          <strong>
            End of outerThing loop (index is: @Loop.OuterLoop.OuterLoop.Index)
          </strong>  
        }
        </li>
      }
      </li>
    }
    </li>
  }
}

答案 1 :(得分:1)

跟踪OuterLoop并不是一件难事。帮助程序将其状态存储在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

这意味着您可以拥有任何深度的循环,包括跨越页面的循环,它仍然有效。

请注意,帮助程序在多线程方案中不起作用,如果您未能处置枚举器,则可能无法正常工作。