0

我正在制作一个应用程序,用户可以在其中进行测验。以下是测验类的示例模型:

[Table("Quizzes")]
public class Quiz
{
    public int Id { get; set; }
    public string Name { get; set; }
    public User CreatedBy { get; set; }
}

到目前为止,“User”类只定义了一个 Id 和 UserName:

[Table("Users")]
public class User
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
}

在我的视图中,我想显示测验列表及其创建的用户。以下是执行此操作的视图部分:

@foreach(var item in Model)
{
    <div>@item.Name</div>
    <div>@item.CreatedBy.UserName</div>
    <hr />
}

当我去运行程序时,我得到一个错误:对象引用未设置为对象的实例。

我知道我做错了一些非常简单的事情,但我不能把我的拇指放在上面,而且我无法在其他地方找到解决我的问题的方法。任何人都可以帮忙吗?

更新:

这是完整的错误:

Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web   
request. Please review the stack trace for more information about the error and where 
it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an 
instance of an object.

Source Error:


Line 25: {
Line 26:     <div>@item.Name</div>
Line 27:     <div>@item.CreatedBy.UserName</div>
Line 28:     <hr />
Line 29: }


Source File: \Views\Home\Index.cshtml    Line: 27 

控制器:

public class HomeController : Controller
{

    YouGotQuizzedDb _db = new YouGotQuizzedDb();

    public ActionResult Index()
    {
        var model = _db.Quizzes.ToList();

        return View(model);
    }
}
4

1 回答 1

1
var model = _db.Quizzes.ToList();

这就是你的问题所在。当您返回由Quiz触发的 zes列表时ToList(),该User对象不会随它一起返回。您应该急于加载User对象。您应该执行以下操作:

var model = _db.Quizzes.Include(x => x.CreatedBy).ToList();

如果上述方法不起作用(我忘了您是否需要使用该方法的扩展方法),您可以试试这个,它会给您相同的结果

var model = _db.Quizzes.Include("CreatedBy").ToList();
于 2013-05-09T03:28:41.290 回答