ASP.. NET Razor Pages相当于页面加载方法



我的HTML页面上有两个按钮,使用"POST"方法。当点击第一个按钮时,模型中一个名为"OnPostSubmitBtn()"的函数;会启动,调用另一个类a对我在相同形式的文本框中收到的输入进行一系列计算,然后将其放入相同形式的输出框中。第二个按钮,是清除两个盒子。当它被点击时,模型中的一个函数叫做OnPostClearBtn()"会启动,清空两个盒子。

在相同的HTML页面上,但是在这个表单下面,我显示了以下信息。该信息由模型中的OnGet()方法填充。在这个"OnGEt()"方法,我正在建立一个连接到数据库,获取信息返回并将其添加到列表中。

问题是,每次我点击提交或清除,下面的内容消失了(内容从数据库填充到下面的表)。似乎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移动到模型的构造函数中,因为它每次都会被调用。

我肯定有专业的方法来做这件事,还是我做这件事的方式就足够了?不管它是不是一个新实例,每次都会调用的等价函数是什么?

如果您希望在OnGetOnPost方法中使用相同的数据,那么您已经确定的解决方法是正确的-在两个处理程序中调用数据库。通常,您可以在PageModel类中编写一个私有方法来完成此操作,然后在相关处理程序中调用该方法。

我将避免把它放在构造函数中,因为get和post方法通常不需要完全相同的数据。通常,如果模型验证失败并且需要重新显示表单,则只需要post方法中的数据。此外,您可能会在将来的某个时候添加其他根本不需要它的处理程序方法。

最新更新