尝试将对象传递给视图时出现此错误。我是MVC的新手所以请原谅我。
传递到字典中的模型项的类型为'System.Collections.Generic.List 1[<>f__AnonymousType1
3 [System.Int32,System.String,System.Nullable 1[System.DateTime]]]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable
1 [MvcApplication1.Models.storageProperty]'
我正在尝试传递一个表的列表,该表将显示来自storageProperty表的对象,其中包含费用表中的最后一个日期(如果有的话)。大多数房产至少有一次费用审计,有些已经有很多,有些则没有。 以下是控制器的代码:
var viewModel = db.storageProperties.Select(s => new
{
s.storagePropertyId,
s.BuildName,
latestExpenseSurvey = (DateTime?)s.expenses.Max(e => e.expenseDate)
}).ToList();
return View(viewModel);
}
并且视图中的@model语句调用storageproperty对象。我在实体框架中使用mvc3。很明显,我无法传递此列表对象来代替storageproperty对象,但我无法弄清楚要做什么,我应该怎么做?
提前致谢。
答案 0 :(得分:1)
永远不要将匿名对象传递给视图。您应该始终传递视图模型。
因此,与ASP.NET MVC应用程序一样,您首先要定义一个反映视图要求的视图模型:
public class MyViewModel
{
public int StoragePropertyId { get; set; }
public string BuildName { get; set; }
public DateTime? latestExpenseSurvey { get; set; }
}
然后在您的控制器中返回IEnumerable<MyViewModel>
:
public ActionResult Index()
{
var viewModel = db.storageProperties.Select(s => new MyViewModel
{
StoragePropertyId = s.storagePropertyId,
BuildName = s.BuildName,
LatestExpenseSurvey = (DateTime?)s.expenses.Max(e => e.expenseDate)
}).ToList();
return View(viewModel);
}
最后强烈地将视图输入到此视图模型的集合中:
@model IEnumerable<MyViewModel>
<div>
@Html.EditorForModel()
</div>
答案 1 :(得分:0)
您的Linq查询项目为匿名类型。您需要为此投影创建命名类型,以便从视图中引用它。