首页 > 解决方案 > 我可以将来自不同模型的字段添加到 MVC5 中的视图吗

问题描述

我有一个与模型关联的视图:ICS_Orders。此视图用于用户打印带有记录的表单。

用户已请求在打印视图上显示一个新字段。该字段不是 ICS_Orders 模型的一部分,而是 ICS_Supplies。我似乎找不到任何关于如何让该字段显示在视图上的信息 - 来自不同的模型。

查看代码:

@model IEnumerable<ICS20web.Models.ICS_Orders>

<table class="table">
<tr>
<th>PO / Requisition Number</th>
<th>Units Ordered</th>
<th>Supply Name</th>
<th>**New Field from Different Model Here**  </th>
</tr>

@foreach (var item in Model)
        {
    <tr>
    <td>@Html.DisplayFor(modelItem => item.RequisitionNumber)</td>
    <td>@Html.DisplayFor(modelItem => item.UnitsOrdered)</td>
    <td>@Html.DisplayFor(modelItem => item.Supply)</td>
    <td>**New Field Display Resuls** <td>
    </tr>
         }
     </table>

如您所见,该视图适用于

@model IEnumerable<ICS20web.Models.ICS_Orders>

新请求的字段 (Old_ItemID) 用于:

@model IEnumerable<ICS20web.Models.ICS_Supplies> 

(WHERE item.Supply(来自当前模型:ICS_Orders)= item.Description(在新模型中:ICS_Supplies))

有没有办法做到这一点?还是我必须一直返回并在我的数据库中创建一个视图和一个新模型?

编辑:

下面是我的 ICS_Orders 模型

public class ICS_Orders
{      
    [Key]
    public int? LineID { get; set; }

    [Required]
    public string RequisitionNumber { get; set; }

    public int SuppliesID { get; set; }

    [Required]
    public int UnitsOrdered { get; set; }

    public string Supply { get; set; }

    public Nullable<int> UnitsDelivered { get; set; }

}

如何添加一个属性来保存 ICS_Supplies 字段 'Old_ITemID' ?我尝试了以下方法,但没有奏效。

public virtual DbSet<ICS_Supplies> ICS_Order { get; set; }

public string Old_ItemID { get; set; }

我需要在控制器中做什么才能按照建议“设置”。

标签: c#asp.net-mvc-5

解决方案


你有几个选择。

  1. 在控制器中创建一个新列表 OrdersWithSupplies 并将其用作您的模型。您将使用 Order 和 Supply 数据填充 OrderWithSupply 类。

  2. 创建一个包含 Orders 列表和 Supplies 列表的新视图模型。如果它们的长度相等,您可以遍历其中之一并使用当前索引来检索正确的供应数据。

为了显示:

@for(var i=0;i<Model.Orders.Length;i++)
        {
    <tr>
    <td>@Html.DisplayFor(m => m.Orders[i].SomeOrderProp)</td>
    <td>@Html.DisplayFor(m => m.Supplies[i].SomeSupplyProp)</td>

如果您清楚地展示您的模型和控制器,我将能够进一步缩小这个答案:)


推荐阅读