gpt4 book ai didi

linq - @foreach 模型为空 :System. NullReferenceException:对象引用未设置为对象的实例

转载 作者:行者123 更新时间:2023-12-02 07:01:03 24 4
gpt4 key购买 nike

我在阅读我对@foreach 的看法时遇到了这个错误。

异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。模型为空。

这是我的用户配置文件模型。

 public class UsersContext : DbContext
{

public UsersContext()
: base("DefaultConnection")
{
}

public DbSet<UserProfile> UserProfiles { get; set; }
public DbSet<Secretarias> Secretarias { get; set; }
public DbSet<Secretarias_Direcciones> Secretarias_Direcciones { get; set; }
}

[Table("UserProfile")]
public class UserProfile
{
[Key]
public int UserId { get; set; }
[Required]
public string Nombre { get; set; }
[Required]
public int SecretariaId { get; set; }
[Required]
public int DireccionId { get; set; }
[Required]
public string UserName { get; set; }

}

这是我的控制

public ActionResult ListaUsuarios()
{
UsersContext db = new UsersContext();
var model = from usrs in db.UserProfiles
select new { usrs.UserId, usrs.Nombre, usrs.UserName, usrs.SecretariaId, usrs.DireccionId };
ViewBag.Model = model.ToList();

return View();
}

这是我的观点

 @foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.UserId)
</td>
<td>
@Html.DisplayFor(modelItem => item.Nombre)
</td>
<td>
@Html.DisplayFor(modelItem => item.UserName)
</td>
<td>
@Html.DisplayFor(modelItem => item.SecretariaId)
</td>
<td>
@Html.DisplayFor(modelItem => item.DireccionId)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.UserId }) |
@Html.ActionLink("Details", "Details", new { id=item.UserId}) |
@Html.ActionLink("Delete", "Delete", new { id=item.UserId })
</td>
</tr>
}

异常详情如下:

System.NullReferenceException: Object reference not set to an instance
of an object. Model is null.

最佳答案

您将收到 NullReferenceException,因为您没有将强类型模型传递给您的 View 。因此,在您的 foreach 循环中,Modelnull。正常的做法是这样的:

return View(model);

真正的问题是您在这里混合了不同的概念。您正在尝试以强类型方式访问模型的属性,但您正在定义 ViewBag.Model 属性,该属性是动态的并且与 没有任何关系 View 中的模型属性。

如果您想以强类型的方式访问您的模型,并且这当然是我建议您这样做的方式,您需要进行几处更改。我建议您首先定义一个 View 模型来表示 UserProfile 的数据:

public class UserProfileViewModel
{
public int UserId { get; set; }
public string Nombre { get; set; }
public int SecretariaId { get; set; }
public int DireccionId { get; set; }
public string UserName { get; set; }
}

现在,更改您的操作以创建以下列表:

public ActionResult ListaUsuarios()
{
using (UsersContext db = new UsersContext())
{
var model = from usrs in db.UserProfiles
select new UserProfileViewModel
{
UserId = usrs.UserId,
Nombre = usrs.Nombre,
UserName = usrs.UserName,
SecretariaId = usrs.SecretariaId,
DireccionId = usrs.DireccionId
};

return View(model.ToList());
}
}

请注意,我在这里做了几处更改。首先,我添加了 using 语句以确保正确处理 UsersContext。接下来,我将查询更改为实例化 UserProfileViewModel,而不是匿名类型。最后,我直接将 model 作为参数传递给 View(),确保对其调用 ToList(),以便在处理 UsersContext 之前评估查询。

最后,您只需要对您的 View 进行一项更改:

@model List<UserProfileViewModel>

@foreach (var item in Model)
{
// rest of code goes here
}

@model 指令指定 View 应该接收的确切模型类型,从而使其成为强类型。

关于linq - @foreach 模型为空 :System. NullReferenceException:对象引用未设置为对象的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20665202/

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