当前位置: 首页 > 知识库问答 >
问题:

Razor Pages不能在另一个方法中重用在OnGet()中定义的属性,因为它是空的

尤飞尘
2023-03-14

我正在进行一个小项目,学习ASP.NET核心与剃刀页。下面是我的页面模型的一部分及其属性

public List<Models.Student> allStudents { get; set; }
public Models.Student studentFocused { get; set; }
        
public async Task<IActionResult> OnGetAsync()
{
    using (var _httpClient = new HttpClient())
    {
        using (var response = await _httpClient.GetAsync(this.uri))
        {
             var fetchedResponse = await response.Content.ReadAsStringAsync();
             this.allStudents = JsonConvert.DeserializeObject<List<Models.Student>>(fetchedResponse);
        }
    }
    return Page();
}

public void OnGetDetails(int id)
{
    this.studentFocused = this.allStudents.Where(s => s.StudentId == id).SingleOrDefault();
}

我得到了OnGetAsync(),它调用一个API路由来检索列表上的所有学生数据,它正在工作,我可以在我的页面文件中显示数据,如下所示:

<div class="row">
    <div class="col-6">
        <ul id="list-students">
            @foreach (var student in Model.allStudents)
            {
                <li><span class="list-students-element">@student.FirstName @student.LastName</span><a asp-page-handler="details" asp-route-id="@student.StudentId">Détails</a></li>
            }
        </ul>
        <div><a asp-page="/Student/Create">Créer nouvel étudiant</a></div>
    </div>
    <div class="col-6">
        <div id="details">
            @if (Model.studentFocused != null)
            {
                <h3>Détails</h3>
                <p>Prénom: @Model.studentFocused.FirstName</p>
                <p>Nom: @Model.studentFocused.LastName</p>
                <p>Age: @Model.studentFocused.Age ans</p>
                <p>Classe: @Model.studentFocused.SchoolClass.Name</p>
                <p><strong>Options</strong></p>
                <a asp-page="/Student/Update" asp-route-id="@Model.studentFocused.StudentId">Modifier</a>
                <a asp-page="/Student/Delete" asp-route-id="@Model.studentFocused.StudentId">Supprimer</a>
            }
        </div>
    </div>
</div>

但是现在,在我的 上,我希望在使用OnGetDetails()方法单击“détails”按钮时显示来自一个学生的详细信息。为此,我在我的allStudents属性中搜索,这是一个列表,带有被通缉学生的ID。我想这个方法并不完整,但就是这样,我就遇到了我的问题:

public void OnGetDetails(int id)
{
    this.studentFocused = this.allStudents.Where(s => s.StudentId == id).SingleOrDefault();
}

因为this.allStudents在这里是空的,虽然在我的OnGet()中刚刚初始化,所以我不明白。

共有1个答案

能旭
2023-03-14

在每个请求上实例化一个新的Controller类对象:(ASP.NET MVC:是否为每个请求创建Controller?)。由于未对此特定请求设置属性,因此列表NULL

如果要为后续请求保留list,请将其设置为sessionmermorycachecookie

 类似资料:
  • 下面包含我的controller类中的代码,我使用方法public String getRegistrationForm(Map model)返回一个带有spring表单的jsp-page,在这个方法中,我设置了UserTab.SetisMfAEnabled(new Boolean(true)),在提交表单时调用方法:public String registerUser(@modelAttribu

  • 所以,我试图在angular 4中创建一个自定义表单组件,我添加了ngModel工作所需的一切,但它没有。 这是我的子组件: 我试着这样使用它:

  • 因此,我试图在angular 4中创建一个自定义表单组件,我添加了ngModel工作所需的所有内容,但它没有。 这是我的子组件: 它扩展到处理所有“ControlValueAccessor”的类ControlValueComponent。 这是类ControlValueAccessor: 为了获得提供程序权限,我使用函数ProviderValueAccessor(位于ControlValueCom

  • 我正在使用log4j2进行一个项目,我的log4j2中有一些值。可配置的属性。该项目还将包括其他组件的配置文件。理想情况下,我希望将所有配置保存在一个地方,以便能够在同一个文件中为log4j设置那些可配置的值,这样我就不会有两个不同的地方更改配置值(例如,包括环境变量)。 我在这方面找到的方法并不理想,比如让我的项目的其他部分从主配置文件中读取值,并将它们放入系统变量中,由log4j获取,因为我希

  • 我只是在网格中添加了一个名为的列。为此,我根据需要修改了WebApi,并看到了数据,这很好。有问题。 异常:未捕获(在promise中):错误:模板解析错误:不能绑定到'innertext',因为它不是'td'的已知属性。(“ename'>][innertext]='activity.coordinatorname'>”):workflowDashboardComponent@72:44错误:模板

  • 我尝试使用Ionic(angular framework)进行简单登录,但我遇到了这个错误,我不知道如何解决它 我搜索了所有人,当他们添加< code >反应式模块时,错误消失了,但当我添加时,错误仍然存在 the app.module.ts 控制器1.ts 我错过了什么吗?请帮助我,我正在处理这个错误

  • 问题内容: 即使未显示组件,启动我的Angular应用程序时也会出现以下错误。 我必须将注释掉,这样我的应用才能正常工作。 我正在查看Hero插件,但与我的代码没有任何区别。 这是组件文件: 问题答案: 是的,就是这样,在app.module.ts中,我刚刚添加了:

  • 我不熟悉角度单元测试。。我正在尝试测试一个模态组件,但不断出现以下错误:“无法绑定到'formGroup',因为它不是'form'的已知属性。” 我尝试过将FormGroup、FormBuilder、Validator传递到测试提供程序中(因为它们是我正在测试的代码中使用的,所以我一次一个地将它们添加到一起),我还尝试将ReactiveFormsMoules添加到它中(与其他提供程序一起,而不与其