页面加载方法的ASP.NET Razor Pages等效项

lf3rwulv  于 2022-11-19  发布在  .NET
关注(0)|答案(1)|浏览(184)

我在HTML页面上的一个表单中有两个按钮,使用“POST”方法。()”将启动,调用另一个类a对我在同一窗体的文本框中接收到的输入进行一系列计算,然后将其放在同一窗体的输出框中。第二个按钮,当它被点击时,模型中的一个名为“OnPostClearBtn()”的函数将启动,清除这两个框。
在同一个HTML页面上,但是在这个表单的下面,我显示了下面的信息。这个信息是由模型中的OnGet()方法填充的。在这个“OnGEt()”方法中,我建立了一个到数据库的连接,获取信息并将其添加到列表中。
问题是每次我点击Submit或clear时,下面的内容都消失了(内容从数据库填充到下面的表中)。看起来OnGet方法只执行一次,每次我点击一个按钮时,都会创建一个新示例,但OnGet方法没有触发,这是正确的。

public class Comments
{
    public string name { get; set; }
    public string email { get; set; } = "NULL"; // default null
    public string comment { get; set; } = "No Comment";
    public string createdAt { get; set; }

}


<h2>Comments</h2>
<table class="table">
<thead>
    <tr>
        <th>Name</th>
        <th>Comment</th>
        <th>Time of creation: </th>
    </tr>
</thead>
<tbody>
    @foreach(var item in Model.comments){
    <tr>
        <td>@item.name</td>
        <td>@item.comment</td>
        <td>@item.createdAt </td>
    </tr>
    }
</tbody>
</table>

有两种方法可以解决这个问题,但我确信它们只是一个简单的例子,而不是专业领域中的真实的解决方案。你可以在两个OnSubmit按钮中再次调用OnGet()方法,或者我可以将数据库连接和填充列表从OnGet移动到Model的构造函数中,因为每次都会调用它。
我相信有专业的方法来做它,或者我做它的方式足够了吗?什么是每次都会调用的等效函数,而不管它是否是一个新示例?

8cdiaqws

8cdiaqws1#

如果您希望在OnGetOnPost方法中使用相同的数据,您所确定的解决方法是正确的-在两个处理程序中调用数据库。通常,您将在PageModel类中编写一个私有方法来执行此操作,然后在相关处理程序中调用该方法。
我会避免将其放在构造函数中,因为get和post方法通常不需要完全相同的数据。通常,如果模型验证失败,您只需要post方法中的数据,并且需要重新显示表单。此外,您可能会在将来的某个时候添加其他根本不需要它的处理程序方法。

相关问题