如何将多个不同的数据库对象传递给不同表中的同一视图

时间:2018-10-10 23:18:28

标签: c# asp.net asp.net-mvc visual-studio entity-framework

对于一个学校项目,我正在使用Entity Framework在ASP.net Core中创建一个应用程序。对于此应用程序,我必须对使用SQL完成的订单执行5种不同的检查,必须将符合sql标准的订单放置在表中。结果必须放在与触发的支票相对应的不同表中的同一视图上。

我使用2种模型:我已加入警报和订单的警报和订单,因此我可以获得与警报(检查)匹配的OrderID

我的应用程序由EFRepository组成,其中包含以下方法:

public IEnumerable<Alerts> GetAlertsByCheck(int checkNumber)
{
    IEnumerable<Alerts> temp = null;
    switch (checkNumber)
    {
        case 1:
            temp = DB.Alerts.Where(e => e.Controle.Equals(CHECK_ONE));
            break;
        case 2:
            temp = DB.Alerts.Where(e => e.Controle.Equals(CHECK_TWO));
            break;
        case 3:
            temp = DB.Alerts.Where(e => e.Controle.Equals(CHECK_THREE));
            break;
        case 4:
            temp = DB.Alerts.Where(e => e.Controle.Equals(CHECK_FOUR));
            break;
        case 5:
            temp = DB.Alerts.Where(e => e.Controle.Equals(CHECK_FIVE));
            break;
    }

    return temp;
}

获取每个警报的订单

public IEnumerable<Orders> GetOrdersByAlert(IEnumerable<Alerts> alerts)
{
    IEnumerable<Orders> temp = null;
    List<Orders> list = new List<Orders>();
    foreach (var alert in alerts)
    {
        Orders order = DB.Orders.First(e => e.Id == alert.Id);
        list.Add(order);
    }

    temp = list;
    return temp;
}

在以下视图中,我试图将每张支票的OrderID放在单独的表中。因此,表1应该包含在其中检查1触发的OrderID,表2应该包含在其中检查2触发的OrderID。

@using Domain.Models.TableModels
@model IEnumerable<Domain.Models.TableModels.Orders>


@{
    ViewData["Title"] = "ResolvedIssuesOverview";
}

<!-- Check 1 table-->
<div class="row">
    <h2>Resolved Issues Overview</h2>
    <div class="col-md-12">
        <h3>Check 1</h3>
        <p>Total amount of orders from the last 72h is higher than &euro; 100.000</p>
        <table class="table table-striped">
            <tr>
                <th>Order ID</th>
                <th>Status</th>
            </tr>
            @foreach (var order in Model ?? Enumerable.Empty<Orders>())
            {
                <tr>
                    <td>@order.Id</td>
                    <td>Resolved</td>
                </tr>
            }

        </table>
    </div>
    <!-- Check 2-->
    <div class="col-md-12">
        <h3>Check 2</h3>
        <p>Country is in FATF high risk list</p>
        <table class="table table-striped">
            <tr>
                <th>Order ID</th>
                <th>Status</th>
            </tr>
            @foreach (var order in Model ?? Enumerable.Empty<Orders>())
            {
                <tr>
                    <td>@order.Id</td>
                    <td>Resolved</td>
                </tr>
            }
        </table>
    </div>

现在在HomeController中,我为该方法提供了一个id = 2参数进行测试,它成功地将来自Check_two的OrderID放置在了表中。

public ViewResult ResolvedIssuesOverview(int id2=2)
{           
    return View(AlertsRepository.GetOrdersByAlert(AlertsRepository.GetSolvedAlertsByCheck(id2)));           
}

现在我的问题是我无法弄清楚如何将其他检查传递给视图并将它们放置在自己的表中。

为了更好地说明我的问题,视图中的表如下所示:

+---------+------------------------+
| OrderID |         Check          |
+---------+------------------------+
|       1 | Invalid payment method |
|       2 | Invalid payment method |
+---------+------------------------+

+---------+------------------------+
| OrderID |         Check          |
+---------+------------------------+
|       3 | Payment aborted        |
|       4 | Payment aborted        |
+---------+------------------------+

任何帮助将不胜感激!在此先感谢:)

1 个答案:

答案 0 :(得分:1)

制作一个viewmodel类,并将其传递给填充有2个表的视图。

public class OrdersViewModel
{
     public IEnumerable<Orders> CheckOneOrders { get;set; }
     public IEnumerable<Orders> CheckTwoOrders { get; set; }
}

然后根据需要在视图中访问每个表。

@model OrdersViewModel

您将需要编写代码以实例化并填充视图模型上的2个属性。