Asp.net mvc 如何在MVC中传递ViewBag以列表形式查看?
我有两个表要在视图中显示Asp.net mvc 如何在MVC中传递ViewBag以列表形式查看?,asp.net-mvc,Asp.net Mvc,我有两个表要在视图中显示 SalesDocument(单行) 交货计划(多行/列表) 我使用ViewBag传递要查看的值,代码如下: 控制器: public ActionResult Detail(string id) { ViewBag.SalesDocument = logisticsContext.Sap_Sales_Order_Report_qas .Where(x => x.sales_documen
public ActionResult Detail(string id)
{
ViewBag.SalesDocument = logisticsContext.Sap_Sales_Order_Report_qas
.Where(x => x.sales_document == id)
.SingleOrDefault();
var ExistingSchedule = sipContext.OrderDeliverySchedules
.Where(o => o.so_no == id)
.OrderBy(o => o.split_date)
.ToList();
ViewBag.DeliverySchedule = ExistingSchedule
.Select(m => new
{
split_date = string.Format("{0:dd-MMM-yyyy}", m.split_date),
m.split_hour,
split_qty = string.Format("{0:N2}", m.split_qty),
m.remarks
}).ToList();
return View();
}
@model Interisland.Areas.v2.Models.Logistics.Sap_Sales_Order_Report_qas
@{
ViewBag.Title = "Detail";
var SalesDocument = (Interisland.Areas.v2.Models.Logistics.Sap_Sales_Order_Report_qas)ViewBag.SalesDocument;
var DeliverySchedule = (List<Interisland.Areas.v2.Models.Sip.OrderDeliverySchedule>)ViewBag.DeliverySchedule;
}
查看:
public ActionResult Detail(string id)
{
ViewBag.SalesDocument = logisticsContext.Sap_Sales_Order_Report_qas
.Where(x => x.sales_document == id)
.SingleOrDefault();
var ExistingSchedule = sipContext.OrderDeliverySchedules
.Where(o => o.so_no == id)
.OrderBy(o => o.split_date)
.ToList();
ViewBag.DeliverySchedule = ExistingSchedule
.Select(m => new
{
split_date = string.Format("{0:dd-MMM-yyyy}", m.split_date),
m.split_hour,
split_qty = string.Format("{0:N2}", m.split_qty),
m.remarks
}).ToList();
return View();
}
@model Interisland.Areas.v2.Models.Logistics.Sap_Sales_Order_Report_qas
@{
ViewBag.Title = "Detail";
var SalesDocument = (Interisland.Areas.v2.Models.Logistics.Sap_Sales_Order_Report_qas)ViewBag.SalesDocument;
var DeliverySchedule = (List<Interisland.Areas.v2.Models.Sip.OrderDeliverySchedule>)ViewBag.DeliverySchedule;
}
@model Interisland.Areas.v2.Models.Logistics.Sap\u Sales\u Order\u Report\u qas
@{
ViewBag.Title=“详细信息”;
var SalesDocument=(Interisland.Areas.v2.Models.Logistics.Sap_Sales_Order_Report_qas)ViewBag.SalesDocument;
var DeliverySchedule=(列表)ViewBag.DeliverySchedule;
}
但是,当我试图在视图上显示它时,它返回了一个异常,表示:
“无法将类型为”System.Collections.Generic.List1[f_uAnonymousType4
4[System.String,System.TimeSpan,System.String,System.String]]的对象强制转换为”System.Collections.Generic.List`1
这只发生在交货时间表上。
我试着调试它,值是正确的,但是在将其转换为视图中的列表时失败了。我的代码有什么问题吗
非常感谢您提前提供的任何帮助您可以/应该使用customModel将数据从控制器传递到视图,而不是使用
ViewBag
public class YourCustomModel
{
public Sap_Sales_Order_Report_qas SalesDocument { get; set; }
public List<DeliverySchedule> DeliverySchedule { get; set; }
}
public class DeliverySchedule
{
public string split_date { get; set; }
public string split_hour { get; set; }
public string split_qty { get; set; }
public string remarks { get; set; }
}
公共类自定义模型
{
公共Sap_销售_订单_报告_qas销售文档{get;set;}
公共列表交付时间表{get;set;}
}
公共类交付时间表
{
公共字符串拆分_日期{get;set;}
公共字符串拆分时间{get;set;}
公共字符串拆分\u数量{get;set;}
公共字符串备注{get;set;}
}
查看
@model Interisland.Areas.v2.Models.Logistics.YourCustomModel
@{
Sap_Sales_Order_Report_qas SalesDocument = Model.SalesDocument;
List<DeliverySchedule> DeliverySchedule = Model.DeliverySchedule;
}
@model Interisland.Areas.v2.Models.Logistics.YourCustomModel
@{
Sap_Sales_Order_Report_qas SalesDocument=Model.SalesDocument;
List DeliverySchedule=Model.DeliverySchedule;
}
您可以/应该使用customModel将数据从控制器传递到视图,而不是使用ViewBag
public class YourCustomModel
{
public Sap_Sales_Order_Report_qas SalesDocument { get; set; }
public List<DeliverySchedule> DeliverySchedule { get; set; }
}
public class DeliverySchedule
{
public string split_date { get; set; }
public string split_hour { get; set; }
public string split_qty { get; set; }
public string remarks { get; set; }
}
公共类自定义模型
{
公共Sap_销售_订单_报告_qas销售文档{get;set;}
公共列表交付时间表{get;set;}
}
公共类交付时间表
{
公共字符串拆分_日期{get;set;}
公共字符串拆分时间{get;set;}
公共字符串拆分\u数量{get;set;}
公共字符串备注{get;set;}
}
查看
@model Interisland.Areas.v2.Models.Logistics.YourCustomModel
@{
Sap_Sales_Order_Report_qas SalesDocument = Model.SalesDocument;
List<DeliverySchedule> DeliverySchedule = Model.DeliverySchedule;
}
@model Interisland.Areas.v2.Models.Logistics.YourCustomModel
@{
Sap_Sales_Order_Report_qas SalesDocument=Model.SalesDocument;
List DeliverySchedule=Model.DeliverySchedule;
}
这一行显然抛出了InvalidCastException
,因为您试图将匿名类型从查询结果强制转换为OrderDeliverySchedule
:
var DeliverySchedule = (List<Interisland.Areas.v2.Models.Sip.OrderDeliverySchedule>)ViewBag.DeliverySchedule;
查看
@model ViewModel
@{
var DeliverySchedule = Model.DeliverySchedule;
}
作为旁注,应避免使用
ViewBag
传递集合,因为ViewBag
内容是在运行时解析的,并且需要额外的强制转换才能获得正确类型的内容,请改用强类型viewmodel属性。这一行显然抛出了InvalidCastException
,因为您试图将匿名类型从查询结果强制转换为OrderDeliverySchedule
:
var DeliverySchedule = (List<Interisland.Areas.v2.Models.Sip.OrderDeliverySchedule>)ViewBag.DeliverySchedule;
查看
@model ViewModel
@{
var DeliverySchedule = Model.DeliverySchedule;
}
作为旁注,应避免使用
ViewBag
传递集合,因为ViewBag
内容在运行时解析,并且需要额外的强制转换才能获得具有适当类型的内容,请改用强类型viewmodel属性。您正在创建匿名对象的集合。您需要创建一个模型并将查询到的项目投影到该模型的集合-
但无论如何,您不应该使用ViewBag
。创建一个包含所有所需数据的视图模型,并返回该视图模型的实例。您正在创建一个匿名对象的集合。您需要创建一个模型,并将查询投影到该模型的集合-。选择(m=>new OrderDeliverySchedule{…}
但无论如何都不应使用ViewBag
。创建一个包含所有所需数据的视图模型,并返回该视图模型的实例