我的观点::
foreach (TSM.Models.Tasks itm in lstTasks.Where(x => x.Project.ID == item.ID).ToList())
{
foreach (TSM.Models.TimeSheetData itemm in ViewBag.HoursData)
{
foreach (TSM.Models.Tasks itm in lstTasks.Where(x => x.Project.ID == item.ID).ToList())
{
<td><input class="txtTaskHours date@(Date.AddDays(i).ToString("MMddyyy"))"
style="width:50px;" value="@itemm.Hours" type="number"
id="@(itm.ID.ToString() + ':' + Date.AddDays(i).ToString("MMddyyy"))" />
</td>
}
我的控制器:
var query = (from ts in db.TimeSheets join tsd in db.TimesheetData on ts.ID
equals tsd.TimeSheet.ID where ts.StartDate == thisWeekStart
&& ts.EndDate == thisWeekEnd select new{ tsd.Hours, tsd.Date, tsd.TaskID }).ToList();
ViewBag.HoursData = query;
return PartialView("~/Views/TimeSheet/_TimeSheet.cshtml", ViewBag);
我想将数据显示到Textbox
。要显示数据,我使用ViewBag
使用foreach循环来显示Textbox
中的小时数。
我的Textbox
数据保存在json中。
这是我的json值:
"TaskHours" : [{
"ID":"f2886ec7-47d3-e711-9666-000c297c9306:12042017",
"Value":"25"
}]
我收到此错误:
'Unable to cast object of type
'<>f__AnonymousType9`3[System.Double,System.DateTime,System.Guid]' to type
'TSM.Models.TimeSheetData'.
答案 0 :(得分:0)
这是您的代码并注意select new
:
var query = (from ts in db.TimeSheets join tsd in db.TimesheetData on ts.ID
equals tsd.TimeSheet.ID where ts.StartDate == thisWeekStart
&& ts.EndDate == thisWeekEnd
select new{ tsd.Hours, tsd.Date, tsd.TaskID }).ToList();
您正在选择一堆匿名对象,然后调用ToList()
,以便最终得到一个匿名对象列表。然后你这样做:
ViewBag.HoursData = query;
所以现在ViewBag.HoursData
有一个匿名类型列表。然后在视图中执行此操作:
foreach (TSM.Models.TimeSheetData itemm in ViewBag.HoursData)
我的问题是:
您希望运行时如何将匿名类型转换为TimeSheetData
?它不能这样给你这个明确的错误:
无法转换类型为&lt;&gt; f__AnonymousType9`3 [System.Double,System.DateTime,System.Guid]&#39;的对象输入 TSM.Models.TimeSheetData&#39;
帮自己一个大忙:我看不到你的所有代码,只是专门为你的视图创建一个模型,然后将你需要的所有内容放入其中并将其传递给你的视图。有些人称之为View Model。您的代码将更清晰,更易于阅读并且更少的错误。通过发送匿名类型,自定义类型和ViewBag以及此而停止黑客攻击。即使它起作用,它仍然看起来很难看。所以去创建一个模型,如链接所示。