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

问题描述:

我创建了两个包含不同值的ViewBags根据ViewBag传递给控制器​​的视图显示不同的按钮?

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> 
} 
+0

您在视图中使用Viewbag的位置在哪里?你在说什么按钮的代码在哪里? –

+0

我错过了。现在我修改了我的问题。 –

+0

foreach(模型中的var用户)肯定是不正确的。它是否为foreach(Model.User中的var用户)? –

这是我的解决方案,如果我明白你的问题正确,如果你想只有那些谁参加会议的用户能够有删除按钮。您需要遍历用户的结果并检查它们是否存在于您的可出席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,其实它不是neccessary,你只需更改像下面

@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

希望它可以帮助

感谢