Несколько данных, отображаемых из базы данных в одно и то же представление

#c# #asp.net-mvc

Вопрос:

Контроллер:

 private void FetchData()
        {
           //Reinicia a varíavel addresses se já conter algo
                if (addresses.Count > 0)
                {

                    addresses.Clear();
                }
                try
                {
                    con.Open();
                    com.Connection = con;
                    com.CommandText = "SELECT [ID], [SYSTEM_NAME], [SYSTEM_STATUS], [SYSTEM_SHORTMSG] FROM [CORE_SYS_STATUS]";
                    dr = com.ExecuteReader();
                    while (dr.Read())
                    {
                    //Lê os dados da base de dados 
                        addresses.Add(new GestaoAlertas()
                        {
                            ID = (int)dr["ID"]
                        ,
                            SYSTEM_NAME = dr["SYSTEM_NAME"].ToString()
                        ,
                            SYSTEM_STATUS = dr["SYSTEM_STATUS"].ToString()
                        ,
                            SYSTEM_SHORTMSG = dr["SYSTEM_SHORTMSG"].ToString()

                        });
                    }
                    con.Close();
                    }
              //Mostra o erro se houver um
                catch (Exception ex)
                {
                   throw ex;
                }
        }
 

Мой взгляд:

 public IActionResult Index()
        {
            FetchData();
            return View(addresses);
        }
 

Мне было интересно, как мне поместить больше данных (другую таблицу) в представление индекса, я попытался сделать адрес2, но это не имеет смысла, потому что я не могу поместить его в «Представление возврата()».

Ответ №1:

вам необходимо создать модель представления

 public class AddressViewModel
{
    public List<Address> Adresses {get; set;}
      public List<Address> Adresses2 {get; set;}
}
 

Экшен

 public IActionResult Index()
{
     var model=new AddressViewModel {Address= new List<Address>, Address= new List<Address> };
      FetchData(model.Address);
      FetchData(model.Address2);
      return View(model);
 }


private void FetchData(List<Address> adresses)
 {
.....
}
 

Вид

 @model AddressViewModel
.....
 

Ответ №2:

Все, что вы можете сделать, это отправить модель в представление. Модель будет содержать все данные. А затем в представлении (cshtml) вы можете извлечь данные из модели и отобразить их по мере необходимости.

Например:

 Public class Payload
{
    List<Address> addresses1 {get; set;}
    List<Address> addresses2 {get; set;}
}
 

Затем в действии выполните следующие действия:

 Payload = new Payload();
Payload.addresses1 = FetchData(); //Change the logic to load data of address1 as a list
Payload.addresses2 = FetchData(); //Change the logic to load data of address2 as a list

return View(Payload);
 

В представлении (cshtml):
Добавьте тип модели представления на странице (первая строка):

 @model Payload
 

Вы также можете добавить необходимую инструкцию с помощью, например:

 @using MyProject.Payload;
 

Затем визуализируйте данные по мере необходимости:

 @if (Model != null)
{
    @foreach (var addr in Model.addresses1)
    {
       //Render address1 data
    }

    @foreach (var addr in Model.addresses2)
    {
       //Render address2 data
    }
}