Razor Pages PageModel返回Null属性

用户970008

为什么此剃刀页面为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并填充了People列表,但是当视图被命中时,视图将引发System.NullReferenceException:“对象引用未设置为对象的实例。” 在Model.People上。对于该视图,People为空。我不明白为什么在OnGet中设置后它会被空值覆盖。

编辑似乎问题出在声明类型。我仍然想知道为什么这会破坏模型。

List<PeopleObj> People =
Yiyi You

因为您使用List<PeopleObj> People = GetPeople().ToList();//returns 4 people,所以您只是创建了一个新列表,所以没有初始化[BindProperty]public List<PeopleObj> People { get; set; }因此,当您使用foreach时,list(Model.People)为null。null不能为foreach。

人们: 在此处输入图片说明

解决方案:

如果要设置PeopleModel的属性,可以更改

List<PeopleObj> People = GetPeople().ToList();

People = GetPeople().ToList();

然后,您仍然可以从OnPost处理程序中的“人员”获取编辑后的数据。

这是一个演示:

模型:

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;
        }
    }

结果: 在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章