栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

传递到字典中的模型项的类型为..,但是此字典需要类型为的模型项

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

传递到字典中的模型项的类型为..,但是此字典需要类型为的模型项

该错误意味着您正在导航到一个其模型被声明为typeof的视图

Foo
(通过使用
@modelFoo
),但实际上向它传递了一个typeof的模型
Bar
(请注意,使用术语 字典
是因为模型是通过传递给该视图的
ViewDataDictionary
) 。

该错误可能是由于

将错误的模型从控制器方法传递到视图(或局部视图)

常见的示例包括使用创建匿名对象(或匿名对象集合)的查询并将其传递给视图

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

通过在控制器中显式声明模型类型以匹配视图中的模型,而不是使用,可以在编译时轻松识别错误

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);

将正确的模型返回到主视图。但是,如果视图包含

@Html.Partial("_Bar") // or @{ Html.RenderPartial("_Bar"); }

默认情况下,传递给部分视图的模型是在主视图中声明的模型,您需要使用

@Html.Partial("_Bar", Model.MyBar) // or @{ Html.RenderPartial("_Bar", Model.MyBar); }

将实例传递

Bar
给局部视图。还要注意,如果
MyBar
is 的值
null
(尚未初始化),则默认情况下
Foo
将传递给part,在这种情况下,需要

@Html.Partial("_Bar", new Bar())

在布局中声明模型

如果布局文件包含模型声明,则使用该布局的所有视图都必须声明相同的模型或从该模型派生的模型。

如果要在布局中包含单独模型的html,请在布局中使用

@Html.Action(...)
调用
[ChildActionOnly]
方法来初始化该模型并返回其局部视图。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/433057.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号