【问题标题】:how can i test only last row in foreach我怎样才能只测试foreach中的最后一行
【发布时间】:2020-09-01 12:37:30
【问题描述】:

我编写了这段代码来显示它工作正常的项目列表,但我想检查 foreach 中最后一行的 trainer_id 的值,以根据该值创建按钮,但我不知道如何

        @foreach (var item in Model.model2)
    {
<tr>


    <td>
        @Html.DisplayFor(modelItem => item.Date)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.who_reply)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Status)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Details)

    </td>




    @if (Convert.ToInt16(@Session["userID"]) == item.trainer_id)
    {
        <td>

            <input class="editreply"  id="editreply" type="button" value="edit" data-reply="@item.Details" data-reply_id="@item.Reply_Id" />

            @*@Html.ActionLink("Edit", "Edit", new { id = Model.model1. })*@

        </td>
    }

感谢您的帮助

【问题讨论】:

标签: c# asp.net asp.net-mvc


【解决方案1】:
@if(item == Model.model2.Last())
{
   ...
}

【讨论】:

  • 只有在最后一项在列表中是唯一的情况下才有效,无论该类型的唯一性定义是什么 (T.Equals(object))。
  • 公平点@Blindy,但我认为在这种情况下这是一个公平的假设。
【解决方案2】:

最干净的方法是遍历索引:

@for(int idx = 0; idx < Model.model2.Length; ++idx)
{
    var item = Model.model2[idx];
    var isLast = idx == Model.model2.Length - 1;

    // ...
}

或者,您可以使用foreach 并使用同样返回索引的函数,例如:

@foreach(var (item, idx) in Model.model2.Select((item, idx) => (item, idx)))
{
    var isLast = idx == Model.model2.Length - 1;

    // ...
}

【讨论】:

  • 没有被问到,但绝对最好的答案是,几乎在所有情况下你都不应该关心,这就是 CSS 的用途。 :last-child 选择器正是出于这个原因。
  • 我认为isLast 总是错误的,因为idx 在第一个代码中永远不会等于Model.model2.Length++idxvar isLast = idx == Model.model2.Length; 之后执行
【解决方案3】:
@if (Model.model2.IndexOf(item) == Model.model2.Count - 1)
{
 .
 .
 .
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-23
    • 2014-09-24
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 2014-10-07
    相关资源
    最近更新 更多