gpt4 book ai didi

c# - 传递到字典中的模型项是 .. 类型的,但是这个字典需要一个类型的模型项

转载 作者:太空宇宙 更新时间:2023-11-03 14:52:42 29 4
gpt4 key购买 nike

已添加此问题和社区 wiki 答案以帮助关闭在 this meta post 中讨论的许多未解答的问题。 .


我有一些代码,当它执行时,它抛出一个异常说:

The model item passed into the dictionary is of type Bar but this dictionary requires a model item of type Foo

这是什么意思,我该如何解决?

最佳答案

该错误意味着您正在导航到一个模型被声明为 typeof Foo 的 View (通过使用 @model Foo),但您实际上向它传递了一个模型这是 typeof Bar(请注意使用术语 dictionary 是因为模型是通过 ViewDataDictionary 传递给 View 的)。

错误可能是由于

将错误的模型从 Controller 方法传递到 View (或部分 View )

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

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

或将对象集合传递给需要单个对象的 View

var model = db.Foos.Where(x => x.ID == id);
return View(model); // passes IEnumerable<Foo> to a view declared with @model Foo

通过在 Controller 中显式声明模型类型以匹配 View 中的模型而不是使用 var,可以在编译时轻松识别错误。

将错误的模型从 View 传递到局部 View

给定以下模型

public class Foo
{
public Bar MyBar { get; set; }
}

和一个用@model Foo声明的主视图和一个用@model Bar声明的局部 View ,然后

Foo model = db.Foos.Where(x => x.ID == id).Include(x => x.Bar).FirstOrDefault();
return View(model);

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

,则会抛出异常
@Html.Partial("_Bar") // or @{ Html.RenderPartial("_Bar"); }

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

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

Bar 的实例传递给分部 View 。另请注意,如果 MyBar 的值为 null(尚未初始化),则默认情况下 Foo 将传递给部分,在在这种情况下,它需要

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

在布局中声明模型

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

如果您想在布局中包含单独模型的 html,则在布局中,使用 @Html.Action(...) 调用 [ChildActionOnly] 方法初始化该模型并返回它的部分 View 。

关于c# - 传递到字典中的模型项是 .. 类型的,但是这个字典需要一个类型的模型项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51126835/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com