Как использовать вложенный цикл foreach в файле .cshtml в MVC ASP .net C # - PullRequest
0 голосов
/ 24 мая 2018

Я создаю приложение, в котором я получаю данные из двух разных таблиц, используя базу данных Mysql.И я получаю эти данные правильно, но проблема в том, что когда я пытаюсь отобразить их на виде с использованием цикла foreach, тогда данные не отображаются надлежащим образом.

Вот мой код:

Контроллер

public ActionResult me()
{

      ViewAllData objviewalldata = new ViewAllData();
      // var emp1 = db.emps.FirstOrDefault(e => e.empid == 1);
      //  objviewalldata.deptname = emp1.dept.deptname;
      // objviewalldata.empname = emp1.empname;


      var emp1 = new ViewAllData();

      MySqlConnection con = new MySqlConnection(@"server=127.0.0.1;user id=root;pwd=n0711p2010p;database=demo;persistsecurityinfo=True");
      using (con)
      {
          con.Open();
          string query = "select emp.empname,dept.deptname from emp inner join dept on emp.deptid=dept.deptid";
          using (MySqlCommand cmd = new MySqlCommand(query, con))
          {
                MySqlDataReader dr;
                emp1.alllemp = new List<string>();
                emp1.alldept = new List<string>();
                using ( dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        emp1.empname = dr["empname"].ToString();
                        emp1.deptname = dr["deptname"].ToString();

                        emp1.alllemp.Add(emp1.empname);
                        emp1.alldept.Add(emp1.deptname);
                    }
                }
           }
      }
      return View(emp1);


} 

View.cshtml

@model  MvcApplication3.Models.ViewAllData

@{
    ViewBag.Title = "Data";
}

<h2>Data</h2>


<table>
    <tr>
        <th>Employee Name</th>
        <th>Depart Name</th>
    </tr>

@foreach (string item in Model.alllemp)
{ <tr>

        <td>@Html.Label(item)</td>

     @foreach (string item1 in Model.alldept)
        {
          <td>@Html.Label(item1)</td>
        } 

       </tr>  

}

</table>

это мой вывод

enter image description here

Я хочу вывод как

Employee Name Department Name
Neel          Software
Nisarg        Software
Prachi        Embeded

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Это приводит к ошибке в кодах следующим образом:

 emp1.alllemp.Add(emp1.empname);
 emp1.alldept.Add(emp1.deptname);

Возможно, вы можете объявить ViewAllData следующим образом:

public List<VO> emps {get;set;}

public class VO 
{
   public string empname {get;set;}
   public string deptname {get;set;}
}

Затем измените коды в слое данных.

using ( dr = cmd.ExecuteReader())
{
   while (dr.Read())
   {
      VO vo = new VO();
      vo.empname = dr["empname"].ToString();
      vo.deptname = dr["deptname"].ToString();

      emp1.emps.Add(vo);
   }
}

Затем измените код в слое вида.

@foreach (string item in Model.emps)
{ 
  <tr>
   <td>@Html.Label(item.empname)</td>
   <td>@Html.Label(item.deptname)</td>     
  </tr>  
}
0 голосов
/ 24 мая 2018

Просто замените цикл foreach на простой цикл for, поскольку ваш вывод может быть сгенерирован без вложенности:

<table>
<tr>
    <th>Employee Name</th>
    <th>Depart Name</th>
</tr>

@for (int i=0; i < Model.allemp.Count;i++)
{
<tr>

    <td>@Html.Label(Model.allemp[i])</td>

    <td>@Html.Label(Model.alldept[i])</td>


</tr>

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...