根据从控制器传递给视图的 ViewBags 显示不同的按钮?

Show different button based upon ViewBags passed to Views from Controller?

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

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

attendingIds 包含 参加 事件的所有用户的 ID,而 notAttendingIds 包含 [=] 所有用户的 ID 21=]没有参加活动。

因为我正在循环浏览,所以它向我显示了太多按钮。如果有 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>
}

如果我理解你的问题是正确的,并且你只希望参加会议的用户能够使用删除按钮,这就是我的解决方案。您需要遍历用户的结果并检查他们是否存在于您的可参与 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>
}

您的问题:

因为我正在循环浏览,所以它向我显示了太多按钮。如果有 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>
}

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

希望对您有所帮助

谢谢