Можно ли передать несколько значений в одну переменную Viewbag? - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь использовать для l oop для передачи нескольких значений с одной и той же переменной ViewBag в таблицу, но она передает только последнее значение, которое получает For.

Я должен использовать та же самая переменная, потому что FOR l oop предположительно заполняет таблицу, и у меня есть переменная ViewBag для каждого столбца таблицы.

View:

<table class="table">
        <tr>
            <th>
                Extintor(es):
            </th>
            <th>
                Nº de Série
            </th>
            <th>
                Marca
            </th>
            <th>
                Agente
            </th>
        </tr>
        @foreach (var item in ViewBag.Words)
        {
            <tr>
                <td align="left">
                    @Html.Display("ID_Extintor")
                </td>
                <td align="left">
                    @Html.Display("N_Serie")
                </td>
                <td align="left">
                    @Html.Display("Marca")
                </td>
                <td align="left">
                    @Html.Display("Agente")
                </td>
            </tr>
        }
</table>

Контроллер (для l oop):

  for (int i = 0; i < words.Length; i++)
  {
        id = words[i];
        int id2 = Convert.ToInt32(id);

        List<Extintores> lista = db.Extintores.Where(x => x.ID == id2).ToList();
        idcliente = Convert.ToInt32(lista[0].ID_Cliente);

        List<Clientes> clientes = db.Clientes.Where(x => x.ID == idcliente).ToList();

        string numcliente2 = clientes[0].Num_Cliente;
        numcliente = numcliente2;
        numextintor = lista[0].Num_Extintor;
        nome = clientes[0].Nome;

        ViewBag.ID_Extintor = numextintor;
        ViewBag.N_Serie = lista[0].Num_Serie;
        ViewBag.Marca = lista[0].Marca.Nome;

        var id_agente = lista[0].ID_Agente;
        List<Agentes> agentes = db.Agentes.Where(x => x.ID == id_agente).ToList();
        ViewBag.Agente = agentes[0].Nome;
    }

1 Ответ

0 голосов
/ 24 марта 2020

Вы должны создать модель представления.

public class WordsViewModel
{
public string ID_Extintor {get;set;}
public string N_Serie {get;set;}
public string Marca {get;set;}
public string Agente {get;set;}
}

В вашем cshtml объявите вашу модель

@model List<WordsViewModel>

....
    @foreach (var item in Model)
    {
        <tr>
            <td align="left">
                @Html.Display(x=>x.ID_Extintor)
            </td>
            <td align="left">
                @Html.Display(x=>x.N_Serie)
            </td>
            <td align="left">
                @Html.Display(x=>x.Marca)
            </td>
            <td align="left">
                @Html.Display(x=>x.Agente)
            </td>
        </tr>
    }
....

и ваш контроллер:

// your view model to fill with data
var viewModel = new List<WordsViewModel>();

  for (int i = 0; i < words.Length; i++)
  {

        var dataRow = new WordsViewModel();

        id = words[i];
        int id2 = Convert.ToInt32(id);

        List<Extintores> lista = db.Extintores.Where(x => x.ID == id2).ToList();
        idcliente = Convert.ToInt32(lista[0].ID_Cliente);

        List<Clientes> clientes = db.Clientes.Where(x => x.ID == idcliente).ToList();

        string numcliente2 = clientes[0].Num_Cliente;
        numcliente = numcliente2;
        numextintor = lista[0].Num_Extintor;
        nome = clientes[0].Nome;

        dataRow.ID_Extintor = numextintor;
        dataRow.N_Serie = lista[0].Num_Serie;
        dataRow.Marca = lista[0].Marca.Nome;

        var id_agente = lista[0].ID_Agente;
        List<Agentes> agentes = db.Agentes.Where(x => x.ID == id_agente).ToList();
        dataRow.Agente = agentes[0].Nome;

        // add the data row to the list
        viewModel.Add(dataRow);
    }

return View(viewModel);

Так как я не был Не уверен, что все ваши данные являются строками или целыми числами, поэтому я просто сделал их строками. Я надеюсь, что это работает для вас.

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