Razor Pages PageModel 正在返回 Null 属性
Razor Pages PageModel is Returning Null Property
为什么此 razor 页面为 Model.People 返回空值 属性?
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 并填充人员列表会发生什么,但是当点击视图时,视图会在 Model.People 上抛出 System.NullReferenceException:'Object reference not set to an instance of an object.'。 People 对于视图为 null。我不明白为什么它在 OnGet 中设置后会被空值覆盖。
编辑
似乎问题在于声明类型。我仍然想知道为什么这会破坏模型。
List<PeopleObj> People =
因为你使用List<PeopleObj> People = GetPeople().ToList();//returns 4 people
,你只是创建了一个新列表,你没有初始化[BindProperty]public List<PeopleObj> People { get; set; }
。
所以当你使用 foreach 时,list(Model.People) 是 null.null cannot be foreach.
人:
解决方案:
如果要设置PeopleModel.You的属性可以改
List<PeopleObj> People = GetPeople().ToList();
到
People = GetPeople().ToList();
然后您仍然可以在 OnPost 处理程序中从 People 获取编辑后的数据。
这是一个演示:
型号:
public class PeopleObj
{
public int Id { get; set; }
public string Name { get; set; }
}
People.cshtml:
<form method="post">
@{var count = 0;}
@foreach (var item in Model.People)
{
<div class="form-group">
<label class="control-label">Id</label>
<input class="form-control" value="@item.Id" name="People[@count].Id"/>
</div>
<div class="form-group">
<label class="control-label">Name</label>
<input class="form-control" value="@item.Name" name="People[@count].Name" />
</div>
count++;
}
<input type="submit" value="submit" />
</form>
People.cshtml.cs:
public class PeopleModel : PageModel
{
[BindProperty]
public List<PeopleObj> People { get; set; }
public void OnGet()
{
People = new List<PeopleObj> {
new PeopleObj{ Id=1, Name="person1"},
new PeopleObj{ Id=2, Name="person2"},
new PeopleObj{ Id=3, Name="person3"},
new PeopleObj{ Id=4, Name="person4"}
};
}
public void OnPost()
{
//get edited data from People
List<PeopleObj> EditedPeople = People;
}
}
结果:
为什么此 razor 页面为 Model.People 返回空值 属性?
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 并填充人员列表会发生什么,但是当点击视图时,视图会在 Model.People 上抛出 System.NullReferenceException:'Object reference not set to an instance of an object.'。 People 对于视图为 null。我不明白为什么它在 OnGet 中设置后会被空值覆盖。
编辑 似乎问题在于声明类型。我仍然想知道为什么这会破坏模型。
List<PeopleObj> People =
因为你使用List<PeopleObj> People = GetPeople().ToList();//returns 4 people
,你只是创建了一个新列表,你没有初始化[BindProperty]public List<PeopleObj> People { get; set; }
。
所以当你使用 foreach 时,list(Model.People) 是 null.null cannot be foreach.
人:
解决方案:
如果要设置PeopleModel.You的属性可以改
List<PeopleObj> People = GetPeople().ToList();
到
People = GetPeople().ToList();
然后您仍然可以在 OnPost 处理程序中从 People 获取编辑后的数据。
这是一个演示:
型号:
public class PeopleObj
{
public int Id { get; set; }
public string Name { get; set; }
}
People.cshtml:
<form method="post">
@{var count = 0;}
@foreach (var item in Model.People)
{
<div class="form-group">
<label class="control-label">Id</label>
<input class="form-control" value="@item.Id" name="People[@count].Id"/>
</div>
<div class="form-group">
<label class="control-label">Name</label>
<input class="form-control" value="@item.Name" name="People[@count].Name" />
</div>
count++;
}
<input type="submit" value="submit" />
</form>
People.cshtml.cs:
public class PeopleModel : PageModel
{
[BindProperty]
public List<PeopleObj> People { get; set; }
public void OnGet()
{
People = new List<PeopleObj> {
new PeopleObj{ Id=1, Name="person1"},
new PeopleObj{ Id=2, Name="person2"},
new PeopleObj{ Id=3, Name="person3"},
new PeopleObj{ Id=4, Name="person4"}
};
}
public void OnPost()
{
//get edited data from People
List<PeopleObj> EditedPeople = People;
}
}
结果: