gpt4 book ai didi

c# - 在 View 中的模型中调用模型。 (asp.net MVC)

转载 作者:搜寻专家 更新时间:2023-10-30 21:58:16 26 4
gpt4 key购买 nike

切记,我对 ASP.NET MVC 还很陌生。所以使用 EF 代码优先方法,我创建了 2 个模型,Movie 和 Producer:

public class Movie {
public int ID {get;set;}
public string Name {get;set;}
public string Genre {get;set;}
public Producer Producer {get;set;}
}
public class Producer {
public int ID {get;set;}
public string Name {get;set;}
public DateTime DOB {get;set;}
public List<Movie> Movies {get;set;}
}

在 Controller 类“电影”中,我调用了一个 View :

public class MoviesController : Controller
{
//context just has DbSet< .. > of both classes.
MoviesContext db = new MoviesContext();
public ActionResult Index()
{
var movies = from m in db.Movies
select m;
return View(movies.ToList());
}
}

但是如果我在 View 中调用生产者

@foreach(var item in Model)
{
<p>@item.Producer.Name</p>
}

MVC 崩溃并显示“对象引用未设置到对象的实例。”错误,即使当我查看数据库时,Producer_ID 字段(代码首先制作的字段)已填写,并且数据库中也存在具有相应 ID 的所有生产者。

我确实手动将值放入数据库中,这是什么原因造成的?

非常感谢任何形式的帮助! :)

最佳答案

尝试通过调用函数 Include() 显式加载 Producer 数据

public ActionResult Index()
{
var movies = from m in db.Movies.Include(b => b.Producer)
select m;
return View(movies.ToList());
}

如果启用延迟加载,您的属性 Producer 将在第一次需要时加载。但是,如果禁用延迟加载,则需要明确指定要加载其他相关实体。

方法Include that accepts a lambda是一种扩展方法,因此您需要在文件顶部使用以下方法添加:

using System.Data.Entity;

替代方法是使用字符串指定包含:

public ActionResult Index()
{
var movies = from m in db.Movies.Include("Producer")
select m;
return View(movies.ToList());
}

结果是一样的,但第一种方法不包含“魔术字符串”,这通常更可取。

关于c# - 在 View 中的模型中调用模型。 (asp.net MVC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31793263/

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