【问题标题】:How do I pass multiple different DB objects to the same View in different tables如何将多个不同的数据库对象传递给不同表中的同一个视图
【发布时间】:2019-03-15 22:40:22
【问题描述】:

对于一个学校项目,我正在使用实体框架在 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        |
+---------+------------------------+

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

【问题讨论】:

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


    【解决方案1】:

    创建一个视图模型类并将其传递给填充了 2 个表的视图。

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

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

    @model OrdersViewModel

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

    【讨论】:

    • 非常感谢,感谢您的回答,我已经成功了 :)
    猜你喜欢
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多