获取有关剃须刀的foreach指标值(Getting index value on razor fo

2019-06-23 23:40发布

我迭代一个List<T>在我认为一个剃刀foreach循环这使得一个局部。 在部分我渲染,我想有4在我看来一行一条记录。 我有两个端列的CSS类,所以需要在偏确定呼叫是否是第一或第四的纪录。 什么是确定这在我的部分,以输出正确的代码的最佳方式?

这是一个包含了循环我的主页:

@foreach (var myItem in Model.Members){

        //if i = 1
        <div class="grid_20">
        <!-- Start Row -->

        //is there someway to get in for i = 1 to 4 and pass to partial?
        @Html.Partial("nameOfPartial", Model)

        //if i = 4 then output below and reset i to 1
        <div class="clear"></div>
        <!-- End Row -->
        </div>

}

我想我可以创建一个INT,我可以在每次通过更新,在这里呈现文本没有问题,但它传递的整数值到我的部分,我更关心的问题。 除非有更好的办法。

这是我的部分:

@{
switch()
case 1:
        <text>
        <div class="grid_4 alpha">
        </text>
break;
case 4:
        <text>
        <div class="grid_4 omega">
        </text>
break;
default:
        <text>
        <div class="grid_4">
        </text>
break;
}

        <img src="Content/960-grid/spacer.gif" style="width:130px; height:160px; background-color:#fff; border:10px solid #d3d3d3;" />
        <p><a href="member-card.html">@Model.Name</a><br/>
        @Model.Job<br/>
        @Model.Location</p>
</div>

不知道是否我有一个金发碧眼今天一天,这是可怕容易,但我就是想不起来传递的int值的最好办法。希望有人可以提供帮助。

Answer 1:

 @{int i = 0;}
 @foreach(var myItem in Model.Members)
 {
     <span>@i</span>
     i++;
 }


Answer 2:

//this gets you both the item (myItem.value) and its index (myItem.i)
@foreach (var myItem in Model.Members.Select((value,i) => new {i, value}))
{
    <li>The index is @myItem.i and a value is @myItem.value.Name</li>
}

在我的博客文章更多信息http://jimfrenette.com/2012/11/razor-foreach-loop-with-index/



Answer 3:

或者你可以简单地这样做:

@foreach(var myItem in Model.Members)
{    
    <span>@Model.Members.IndexOf(myItem)</span>
}


Answer 4:

看看使用LINQ这一解决方案。 他的例子是,他需要不同的标记,每3项类似。

foreach( var myItem in Model.Members.Select(x,i) => new {Member = x, Index = i){
    ...
}


Answer 5:

有没有你不使用CSS选择器样式的第一和最后一个元素,而不是试图自定义类接触到它们的理由吗? 相反,基于阿尔法或Ω造型,先用胎和最后一个孩子。

http://www.quirksmode.org/css/firstchild.html



Answer 6:

的IndexOf似乎是有用的在这里。

@foreach (myItemClass ts in Model.ItemList.Where(x => x.Type == "something"))
    {
       int currentIndex = Model.ItemList.IndexOf(ts);
       @Html.HiddenFor(x=>Model.ItemList[currentIndex].Type)

...



Answer 7:

非常简单:

     @{
         int i = 0;
         foreach (var item in Model)
         {
          <tr>
          <td>@(i = i + 1)</td>`
          </tr>
         }
      }`


Answer 8:

所有上述答案需要逻辑在视图中。 意见应该是愚蠢的,并包含尽可能少的逻辑地。 为什么不创建对应列表中的如来定位在你看来模特属性:

public int Position {get; set}

在您的视图模型生成您到4设置的位置1。

但..甚至有一个更清洁的方式。 为什么不把CSS类视图模型的财产? 因此,而不是在你的局部switch语句,你只是这样做:

<div class="@Model.GridCSS">

移动switch语句到您的视图模型构建和填充CSS类那里。



Answer 9:

如果要统计从模型引用(即:客户拥有的地址作为参考,因此你要算多少地址将存在一个客户)在您的视图,如foreach循环:

 @foreach (var item in Model)
                        {
                            <tr>
                                <td>
                                    @Html.DisplayFor(modelItem => item.DtCadastro)
                                </td>

                                <td style="width:50%">
                                    @Html.DisplayFor(modelItem => item.DsLembrete)
                                </td>
                                <td>
                                    @Html.DisplayFor(modelItem => item.DtLembrete)
                                </td>
                                <td>
                                    @{ 
                                        var contador = item.LembreteEnvolvido.Where(w => w.IdLembrete == item.IdLembrete).Count();
                                    }
                                    <button class="btn-link associado" data-id="@item.IdLembrete" data-path="/LembreteEnvolvido/Index/@item.IdLembrete"><i class="fas fa-search"></i> @contador</button>
                                    <button class="btn-link associar" data-id="@item.IdLembrete" data-path="/LembreteEnvolvido/Create/@item.IdLembrete"><i class="fas fa-plus"></i></button>
                                </td>
                                <td class="text-right">
                                    <button class="btn-link delete" data-id="@item.IdLembrete" data-path="/Lembretes/Delete/@item.IdLembrete">Excluir</button>
                                </td>
                            </tr>
                        }

做作为编码:

@{ var contador = item.LembreteEnvolvido.Where(w => w.IdLembrete == item.IdLembrete).Count();}

并使用它像这样:

<button class="btn-link associado" data-id="@item.IdLembrete" data-path="/LembreteEnvolvido/Index/@item.IdLembrete"><i class="fas fa-search"></i> @contador</button>

PS:不要忘了,包括添加到引用你的DbContext内部,例如,你的指数动作控制器,如果这是一个IEnumerable模型。



文章来源: Getting index value on razor foreach