根据从Controller传递给Views的ViewBags显示不同的按钮?

时间:2017-06-02 19:51:05

标签: asp.net-mvc loops viewbag

我创建了两个包含不同值的ViewBags

ViewBag.attendingEvents = attendingIds;
ViewBag.notAttendingEvent = notAttendingIds;

attendingIds包含参加事件的所有用户的ID,而notAttendingIds包含所有未参与的用户的ID 事件。

它向我显示了太多按钮,因为我正在循环播放。如果有100个用户参加该事件,那么它显示100个删除按钮,其中包含一个记录,因为循环。什么是解决这个问题的最佳方法?

@foreach (var user in Model)
{
  <tr>
    <td>
        @Html.DisplayFor(modelItem => user.Name)
    </td>
    <td>
        @foreach(var record in ViewBag.attendingEvents as IList<User>) {<a href="#"> Remove </a>}
    </td>
  </tr>
}

2 个答案:

答案 0 :(得分:2)

你的问题:

它向我显示了太多按钮,因为我正在循环播放。如果有100个用户参加该事件,那么它显示100个删除按钮,其中包含一个记录,因为循环。什么是解决这个问题的最佳方法?

最佳方法或解决方案:

你遇到了上述问题,因为有一个foreach放置按钮,实际上它不是必需的,你只需更改你的代码如下

@foreach (var user in Model.User)
{
  <tr>
    <td>
        @Html.DisplayFor(modelItem => user.Name)
    </td>
    <td>
        string[] Users_attendingEvents = string[](ViewBag.attendingEvents);
        @if(Users_attendingEvents.Contains(user.Id))
            {
                <a href="#"> Remove </a>
             }
    </td>
  </tr>
}

您还可以查看此链接以获取更多信息:how to use .contains in Viewbag in asp.net mvc

希望有所帮助

由于

答案 1 :(得分:1)

如果我理解您的问题是正确的,并且您只希望参加会议的用户能够拥有删除按钮,那么这是我的解决方案。您需要遍历用户的结果并检查它们是否存在于您的可访问ID列表中。

@foreach (var user in Model.User)
{
  <tr>
    <td>
        @Html.DisplayFor(modelItem => user.Name)
    </td>
    <td>
        @if(ViewBag.attendingEvents.Contains(user.Id))
            {<a href="#"> Remove </a>}
    </td>
  </tr>
}