【发布时间】:2020-12-05 14:52:53
【问题描述】:
我从控制器传递 viewbag 中的列表数据。访问 viewbag 作为列表时出现错误。
error - 'Object reference not set to an instance of an object.'
在这一行出现错误。 ViewBag.Total_PowerList as IEnumerable<TransformerEnergyMonitoring.Models.KWHConsumption>
查看
@model IEnumerable<TransformerEnergyMonitoring.Models.KWHConsumption>
<div class="row">
<div class="table-responsive">
<table id="myTable" class="table table-bordered table-hover table-striped">
<thead class="table-header">
<tr>
<th>Date</th>
<th>KWH Reading</th>
<th>KWH Consumption</th>
</tr>
</thead>
<tbody>
@foreach (var item in (ViewBag.Total_PowerList as IEnumerable<TransformerEnergyMonitoring.Models.KWHConsumption>))
{
<tr>
<td>@item.timeStamp</td>
</tr>
}
</tbody>
</table>
</div>
</div>
数据集
{ timeStamp = 12/5/2020 12:00:00 AM, finalState = 47326.95, consuption = 1455.71 }
控制器
public ActionResult KWHDateWise(RangeSelection RS)
{
DateTime ToDate = Convert.ToDateTime(RS.ToDate).AddDays(1);
RS.ToDate = ToDate;
List<KWHConsumption> kwhcon = new List<KWHConsumption>();
var Total_PowerList = db.Total_Power.Where(u => u.DeviceImei == RS.DeviceImei && (u.DeviceTimeStamp >= RS.FromDate && u.DeviceTimeStamp <= RS.ToDate)).OrderByDescending(u => u.DeviceTimeStamp).ToList();
ViewBag.Total_PowerList= Total_PowerList
.GroupBy(
i => i.DeviceTimeStamp.Date,
(timeStamp, dayilyData) => new { timeStamp, dayilyData })
.Select(i => new
{
i.timeStamp,
finalState = i.dayilyData.Max(x => x.KWH),
consuption = (i.dayilyData.Max(x => x.KWH) - i.dayilyData.Min(x => x.KWH))
})
.ToList();
return PartialView("~/Views/TransEnergyHistory/_KWH.cshtml", kwhcon);
}
型号
public class KWHConsumption
{
public DateTime timeStamp { get; set; }
public double finalState { get; set; }
public double consuption { get; set; }
}
【问题讨论】:
-
你为什么要通过
viewbag?您已经有一个viewmodel,只需向其中添加列表并使用它。 -
该模型用于填充其他数据。我只需要在这里使用viewbag。
-
还有什么错误呢?我没有看到框架抛出异常。您是否期待特定的输出,但得到了不同的结果?请更新您的问题,以便更清楚地了解该问题。
-
'object' 在我使用@item.timeStamp 时不包含'timeStamp' 的定义
-
您可能只需要将您的 viewbag 对象绑定到列表中包含的类型的类。
标签: c# asp.net-mvc linq