【发布时间】:2021-05-14 08:29:03
【问题描述】:
为什么这个 razor 页面会返回 Model.People 的 null 属性?
People.cshtml.cs
public class PeopleModel : PageModel
{
[BindProperty]
public List<PeopleObj> People { get; set; }
public void OnGet()
{
List<PeopleObj> People = GetPeople().ToList();//returns 4 people
}
}
People.cshtml
@page
@model MyProject.Pages.PeopleModel
@foreach (var item in Model.People){
//Model.People is null
}
发生的情况是调用 OnGet 并填充人员列表,但是当视图被点击时,视图抛出 System.NullReferenceException: 'Object reference not set to an instance of an object。在 Model.People 上。 People 对于视图为空。我不明白为什么在 OnGet 中设置后会被空值覆盖。
编辑 似乎问题在于声明类型。我仍然想知道为什么这会破坏模型。
List<PeopleObj> People =
【问题讨论】:
-
似乎问题在于声明类型是问题。我仍然会对幕后发生的事情感兴趣。它是在实例化一个新对象吗?申报的财产是否被埋在某个地方?任何深入了解页面周期或模型的细节都会有所帮助。
-
这里没有专家,但是你为什么要在你自己初始化的时候绑定 People 对象(绑定的意思是:从 HTTP 请求数据加载它)?可能是绑定过程在您的初始化发生后重置了该值。但这只是猜测。
-
我包含 BindProperty 只是因为它确实从请求 onPost 中绑定。 onGet 填充用户列表,然后可以对其进行编辑和回发。我认为在这种情况下它是无关紧要的,但我包括它是因为它在那里,我不确定它是否重要。谢谢
标签: c# asp.net-core razor razor-pages .net-5