传入字典的模型项是types..但是这个字典需要一个types的模型项
这个问题和社区维基答案已被添加,以帮助closures这个meta post中讨论的许多未解决的问题。
我有一些代码,当它执行时,它会抛出一个exception,说:
传入字典的模型项目是Bartypes的,但是这个字典需要一个Footypes的模型项目
这是什么意思,我该如何解决?
这个错误意味着你正在浏览一个模型被声明为typeof Foo
的视图(通过使用@model Foo
),但是你实际上已经传递了一个typeof Bar
的模型(注意术语词典被使用是因为模型被传递给通过ViewDataDictionary
查看)。
错误可能是由于
将错误的模型从控制器方法传递到视图(或部分视图)
常见示例包括使用创build匿名对象(或匿名对象的集合)并将其传递给视图的查询
var model = db.Foos.Select(x => new { ID = x.ID, Name = x.Name }; return View(model); // passes an anonymous object to a view declared with @model Foo
或将一组对象传递给期望单个对象的视图
var model = db.Foos.Where(x => x.ID == id); return View(model); // passes IEnumerable<Foo> to a view declared with @model Foo
通过在控制器中显式声明模型types以匹配视图中的模型而不是使用var
可以在编译时容易地识别错误。
将错误的模型从视图传递到局部视图
给定以下模型
public class Foo { public Bar MyBar { get; set; } }
并使用@model Foo
声明主视图,然后使用@model Bar
声明局部视图
Foo model = db.Foos.Where(x => x.ID == id).Include(x => x.Bar).FirstOrDefault(); return View(model);
将正确的模型返回到主视图。 但是,如果视图包含,则会抛出exception
@Html.Partial("_Bar") // or @{ Html.RenderPartial("_Bar"); }
默认情况下,传递给部分视图的模型是在主视图中声明的模型,您需要使用
@Html.Partial("_Bar", Model.MyBar) // or @{ Html.RenderPartial("_Bar", Model.MyBar); }
将Bar
的实例传递给局部视图。 还要注意的是,如果MyBar
值为null
(尚未初始化),那么默认情况下Foo
将被传递给partial,在这种情况下,它需要
@Html.Partial("_Bar", new Bar())
在布局中声明模型
如果布局文件包含模型声明,则使用该布局的所有视图必须声明相同的模型或从该模型派生的模型。
如果要在布局中包含单独模型的HTML,那么在布局中,使用@Html.Action(...)
调用[ChildActionOnly]
方法将初始化该模型并返回其部分视图。
- 剃刀:@ Html.Partial()vs @RenderPage()
- 如何更新ASP.NET标识中的声明?
- ASP.NET MVC如何将JSON对象从View传递给Controller作为参数
- 如何使用具有“贪婪”构造函数的Scan来使用具有通用未closurestypes的StructureMap
- 把内容放在HttpResponseMessage对象中?
- 为什么从Razor View接收POST请求时,我会得到null而不是空string?
- 可能从JavaScript文件访问MVC ViewBag对象?
- MVC中的Last-Modified头
- 无法findpath的一部分… bin \ roslyn \ csc.exe