ASP.NET: создание двумерного массива и отправка его в представление - PullRequest
0 голосов
/ 14 сентября 2018

О проекте:

Я работаю над проектом для игровых автоматов.

В моей модели у меня есть класс (Machine), гдеЯ храню медленно меняющиеся свойства, такие как id, inventory_code, machine_type и т. Д.

Я также храню таблицу фактов (Machine_Facts), где храню доходы, полученные этими машинами.Эта таблица фактов содержит дату последнего открытия машины, на которой можно было собирать монеты (last_date).Он также содержит другие свойства, такие как inventory_code.

Проблема

У меня проблема с работой с представлением.Я хотел бы представить вид, подобный этому:

enter image description here

Это представление, где мы получим доступ к каждому игровому автомату и зарегистрируем, сколько наличных денег мы сняликаждой машины.

Это представление можно сделать, вызывая в основном информацию класса Machine, за исключением значения Fecha (свойство last_date), поскольку это свойство находится в таблице фактов..

Как найти в таблице фактов список inventory_code и last_date и вывести самую последнюю дату (это будет двумерный массив).

Послечто я думаю о передаче класса Machine и массива в View с помощью ViewModel.

Будет ли это правильным подходом к проблеме?Любые другие предложения?

Данные пока:

Модели:

ViewModel

namespace Application.Models.ApplicationviewModels
{
    public class IncomeIndexData
    {
        public int fact_id { get; set; }
        /*Other properties related to the income*/
        //This list contains most of the properties of the machine
        public List<Machine> MachinesL { get; set; }

    }

    public class MachineLastDate
    {
        public string machine_cod { get; set; }
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public DateTime last_date { get; set; }
    }
}

Станок

namespace Application.Models
{
    public class Machine
    {
        [Key]
        public int machine_id { get; set; }
        /*Other machine properties*/
        public string inventory_code { get; set; }

        public virtual ICollection<Machine_Fact> Machine_Facts { get; set; }
    }
}

Факт

public class Machine_Facts
{
    [Key]
    public int fact_id { get; set; }
    /*Other properties*/
    //Foreign Keys
    [ForeignKey("machine_id")]
    public virtual Machine Machines{ get; set; }

    public int machine_id { get; set; }
 }

Контроллер:

    public async Task<IActionResult> Index()
    {
        var machines = await _context.Machines.Where(t => t.Machines.mac_liquidador == User.Identity.Name).ToListAsync();

        var fact_machine_last_liq = await _context.FactIncome.Select(??).ToListAsync();
        IncomeIndexData Income = new IncomeIndexData()
        {
            MachinesL = machines,
            MachineLastDate = fact_machine_last_liq
        };

        return View(Income);
    }

Просмотр:

            <table style="width:100%;" class="table table-striped table-bordered table-hover">
                <thead>
                    <tr>
                        <td><div>Familia</div></td>
                        <td><div>Modelo</div></td>
                        <td><div>Código</div></td>
                        <td><div>Contador</div></td>
                        <td><div>Última Liquidación</div></td>
                        <td><div>Liquidar</div></td>
                    </tr>
                </thead>
                @foreach (var item in Model.ContadoresL)
                {
                @if (item.tienda_nombre == tienda)
                {

                    <tbody>
                        @if (item.machine_active != 0)
                        {
                            <tr>
                                <td>@item.mac_familia_desc</td>
                                <td>@item.mac_descrip</td>
                                <td>@item.mac_comercial_cod</td>
                                <td>@item.mac_internal_cod</td>
                                <td>Fecha</td>
                                //search the internal_cod in the bidimensional array and bring the date
                                //@foreach (var date in Model.MachineLastDate){
                                  if(item.mac_internal_cod == date.machine_code){<td>@date.lastdate</td>}
                                  }
                                //
                                <td colspan="14" align="right">
                                    <input type="submit" value="Liquidar" />
                                </td>
                            </tr>
                        }
                    </tbody>
                }
                }
            </table>

1 Ответ

0 голосов
/ 14 сентября 2018

Создайте ViewModel с нужными вам свойствами. Старайтесь не делать это в представлении. Создайте отдельный метод и обработайте его. Попробуйте это ниже с соответствующими свойствами

 public class IncomeIndexDataViewModel
 {
      public string mac_familia_desc { get; set; }
      public string mac_descrip { get; set; }
      public string mac_comercial_cod { get; set; }
      public string mac_internal_cod { get; set; }
      public DateTime Codigo { get; set; }
 }

    public async Task<IActionResult> Index()
    {
        var machines = await _context.Machines.Where(t => t.Machines.mac_liquidador == User.Identity.Name).ToListAsync();

        var fact_machine_last_liq = await _context.FactIncome.Select(??).ToListAsync();

        var data = transform(machines,fact_machine_last_liq);
        return View(data);
    }

    private  List<IncomeIndexDataViewModel> transform(List<Machines> machines, List<FactIncome> fact_machine_last_date )
    {
        var results = new List<IncomeIndexDataViewModel>();
        foreach (var item in machines)
        {
            results.Add(new IncomeIndexDataViewModel{
                mac_familia_desc = item.mac_familia_desc
                mac_descrip = item.mac_descrip
                mac_comercial_cod = item.mac_comercial_cod
                mac_internal_cod = item.mac_internal_cod
                Codigo = fact_machine_last_date.FirstOrDefault(x=>x.mac_internal_cod==item.machine_code)
            });
        }
        return results;
    }

На виду

@ { var grid = new WebGrid(source: Model, rowsPerPage: 10); }
<div id="grid">
  @grid.GetHtml( tableStyle: "table table-bordered table-sm", mode: WebGridPagerModes.All, firstText: "
  << First ",  
            previousText: "< Prev ",  
            nextText: "Next>", lastText: "Last >>", //add next or prev link in webgrid columns: grid.Columns( grid.Column("mac_familia_desc"), grid.Column("mac_descrip"), grid.Column("mac_comercial_cod") grid.Column("mac_internal_cod") grid.Column("Codigo") ) )
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...