我在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的构造函数中,因为每次都会调用它。
我相信有专业的方法来做它,或者我做它的方式足够了吗?什么是每次都会调用的等效函数,而不管它是否是一个新示例?
1条答案
按热度按时间8cdiaqws1#
如果您希望在
OnGet
和OnPost
方法中使用相同的数据,您所确定的解决方法是正确的-在两个处理程序中调用数据库。通常,您将在PageModel类中编写一个私有方法来执行此操作,然后在相关处理程序中调用该方法。我会避免将其放在构造函数中,因为get和post方法通常不需要完全相同的数据。通常,如果模型验证失败,您只需要post方法中的数据,并且需要重新显示表单。此外,您可能会在将来的某个时候添加其他根本不需要它的处理程序方法。