c# - 我可以将来自不同模型的字段添加到 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; }
我需要在控制器中做什么才能按照建议“设置”。
解决方案
你有几个选择。
在控制器中创建一个新列表 OrdersWithSupplies 并将其用作您的模型。您将使用 Order 和 Supply 数据填充 OrderWithSupply 类。
创建一个包含 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>
如果您清楚地展示您的模型和控制器,我将能够进一步缩小这个答案:)