【发布时间】:2015-04-24 18:17:06
【问题描述】:
我尝试使用 ViewModel 将 2 个表从 Controller 传递给查看
我声明:
public class Temp
{
public Models.ORDER_HEADER_INFO ORDER_HEADER_INFO { get; set; }
public Models.ORDER_ROUTING_DETAIL ORDER_ROUTING_DETAIL { get; set; }
}
在控制器中我写:
public ActionResult DataLoading()
{
using (Models.AllDataEntities et = new Models.AllDataEntities())
{
var Odata = (from ord in et.ORDER_ROUTING_DETAIL join
oh in et.ORDER_HEADER_INFO on ord.ORDER_NO equals oh.ORDER_NO
orderby ord.TARGET_COMPLETION_FLAG,oh.PRODUCT_START_DATE
select new {Order_No = oh.ORDER_NO,ROUTING_NAME = ord.ROUTING_NAME,
PJNO = oh.PJNO,DELIVERY_DESTINATION = oh.DELIVERY_DESTINATION,
}).ToList();
return View(Odata);
}
}
在视图中:
<table>
@for (int i = 0; i < Model.Count; i++ )
{
<tr>
<td>@Html.DisplayFor(m=>m[i].ORDER_HEADER_INFO.ORDER_NO)</td>
<td>@Html.DisplayFor(m=>m[i].ORDER_HEADER_INFO.PJNO)</td>
<td>@Html.DisplayFor(m=>m[i].ORDER_ROUTING_DETAIL.ROUTING_NAME)</td>
<td>@Html.DisplayFor(m=>m[i].ORDER_HEADER_INFO.DELIVERY_DESTINATION)</td>
</tr>
}
</table>
当我运行代码时,出现这样的异常:
传入字典的模型项是类型 'System.Collections.Generic.List
1[<>f__AnonymousType34[System.String,System.String,System.String,System.String]]', 但是这本词典需要一个类型的模型项 'System.Collections.Generic.List`1[TIS.Models.Temp]'。
当我调试时,数据已完全加载到 Odata,但我无法理解 Odata 的类型。
【问题讨论】:
-
尝试改变这个 -
select new Temp() {Order_No = oh.ORDER_NO,ROUTING_NAME = ord.ROUTING_NAME, PJNO = oh.PJNO,DELIVERY_DESTINATION = oh.DELIVERY_DESTINATION, }).ToList(); -
@ramiramilu - 无法工作,因为 Temp 没有 Order_No。
-
当我在代码中添加 Temp 时,他们不明白什么是 Order_No、ROUTING_NAME、PJNO、DELIVERY_DESINATION
-
您必须使用在 Temp 类中声明的属性名称。例如。新的 Temp(){ ORDER_HEADER_INFO.Order_No = oh.ORDER_NO}。
-
是的,你是对的,但问题是你的模型需要 List
,但你发送的是 List 。因此,要么更改您的 Temp() 以保存所有值,要么定义新类型并将视图更改为相应的类型。