【问题标题】:Loop foreach and while but how use in C# Razor [duplicate]循环 foreach 和 while 但如何在 C# Razor 中使用 [重复]
【发布时间】:2020-04-11 00:10:37
【问题描述】:

你知道我如何使用循环“while”和“foreach”来显示结果吗 对于我的代码:

Control.cs:

IEnumerable<Acces> all_id = acces_Repository.FindAll("where email = '" + id_ + "'");
ViewBag.Acceslist = all_id;
ViewBag.Liste = listeRepository.FindAll(" order by id ASC ");

函数.cs:

public IEnumerable<Acces> FindAll(string where = "")
        {
            try { 
            using (IDbConnection dbConnection = Connection)
            {
                dbConnection.Open();
                return dbConnection.Query<Acces>("SELECT * FROM access "+where);
                }
            }
            catch (Exception ex)
            {
               ex.ToString();
                return null;
            }
        }

我想要它在 acces.cshtml 中的结果:

<select class=" chosen-select form-control form-control-sm" name="id" value="" multiple="multiple">
 @foreach (var item in ViewBag.Liste)
 {
    @foreach (var item12 in ViewBag.Acces_liste)
    {
       @if (item.Id == item12.Id)
       {
          <option value="@item12.Id" checked selected="selected">@item12.Id</option>
       } else {
          <option value="@item.Id">@item.Id</option>
       }
     }
 }
 </select>

我有两个不返回相同结果但来自同一个数据库的函数。为了显示所有结果但选择正确的结果。 要得到这个结果: Result

【问题讨论】:

标签: c# asp.net razor foreach while-loop


【解决方案1】:

好的,我们来看看如何在View 上显示结果集。

您可以使用ViewBag 分配您的列表,然后在您的视图上对其进行迭代

您可以在视图上使用强类型模型绑定。我更喜欢使用这种方法,因为它可以为您提供更具体的实现。

关于你的情况,你可以这样做:

IEnumerable<Acces> all_id = acces_Repository.FindAll("where email = '" + id_ + "'");
ViewBag.Acceslist = all_id;

您可以像这样在View 上简单地遍历此列表:

<ul>
    @if(ViewBag.Acceslist !=null)
    {
      @foreach(var data ViewBag.Acceslist)
      {
        <li>@data.Id</li>        
      }
    }
</ul>

您需要检查null,否则如果遇到空值,您的View 会崩溃。

您可以使用LINQ 方法加入我们的列表,并在一个列表中获取您需要的数据,您可以将其发送到您的View。您可以执行以下操作:

IEnumerable<Acces> all_id = acces_Repository.FindAll("where email = '" + id_ + "'");
var liste = listeRepository.FindAll(" order by id ASC ");

var all_id_list=all_id.ToList();
var liste_list=liste.ToList();

var myList= from a in all_id_list
           join l in liste_list on a.Id equals l.Id
           where a.EmailId == "myemail@example.com"

ViewBag.displayMyList=myList;

然后您可以在 View 上循环查看此 ViewBag 以显示结果。

【讨论】:

  • 是的,感谢您使用您的代码,但我借此机会更进一步。我修改了,为了我的最终结果
  • 我以前用过这个,但无法比较两个结果
  • 我想比较两个结果(如 acces.cshtml)并能够选择需要的结果
  • 我编辑了,不知道大家有没有看到我研究
  • 是选择或取消选择,并拥有对所选选项之一的权限
【解决方案2】:

你可以这样做:

 int temp = 0;

 foreach (Acces item in all_id)
 {
    ViewBag.liste[temp] = item.Id;
    temp ++;
 }

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

for (int temp = 0; temp < all_id.Count(); temp++)
{
  ViewBag.liste[temp] = all_id[temp].Id;
}

【讨论】:

    【解决方案3】:

    你可以使用Why Not 但我认为你如果使用这个代码那就更好了

    for  (int i=0;i < all_id.Count();i++)
    {
         foreach (Acces item in all_id)
         {
            ViewBag.liste[i] = item.Id;
         }
    
    }
    

    【讨论】:

    • 谢谢,但我有这个错误:'无法对空引用执行运行时绑定'
    • 你必须发送完整的代码我们才能找到你的问题在哪里
    • Viewbag 中的每个项目都将具有来自 all_id 的最后一个项目...
    • 我已经编辑了我的帖子。我想恢复所有结果:)
    • @Toomy 请确保检查您的 Viewbag,因为这似乎是空的
    猜你喜欢
    • 2015-09-23
    • 2017-06-29
    • 2021-08-10
    • 1970-01-01
    • 2023-04-09
    • 2013-02-04
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    相关资源
    最近更新 更多