关于该项目:
我正在研究老虎机的项目。
在我的模型中,我有一个类(Machine
),我存储缓慢变化的属性,如id
,inventory_code
,machine_type
等。
我还保留了一张事实表(Machine_Facts
),我存储了这些机器产生的收入。此事实表包含机器打开以从中收集硬币的最后日期(last_date
)。它还包含其他属性,如inventory_code
。
问题
我在查看视图时遇到问题。我想提出这样的观点:
这是我们访问每台老虎机并记录我们从每台机器中取出多少现金的视图。
除了Machine
值(Fecha
属性)之外,这个视图可以主要调用last_date
类的信息到视图,因为此属性在事实表中。
如何在事实表中搜索inventory_code
和last_date
列表,并带来最近的日期(这将是一个二维数组)。
之后,我正在考虑使用ViewModel将Machine
类和数组传递给View
。
这是解决问题的正确方法吗?还有其他建议吗?
迄今为止的数据:
楷模:
视图模型
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>
使用您需要的属性创建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>