我知道这是一个老问题,但是当您查找如何在 ASP Razor 中运行 OnClick 方法时,这是 google 上的第一个结果,我认为有比目前接受的更好的方法来做到这一点回答。我不知道这在编写原始答案时是否是新的,但我确实认为这是处理这种行为的最佳方法,因为它不需要手写 AJAX 或 JavaScript 方法。
对于那些从 Web 窗体进入 ASP Razor 的人来说,重新创建这种行为类型的最佳(也是最简单)的方法可能是使用处理程序方法。处理程序方法附加到 Get 和 Post 方法,并且可以使用 ASP Razor 生成的表单运行。
默认情况下,您的 cshtml.cs 页面将具有如下所示的函数:
public async Task OnPostAsync()
{
<Do Post Stuff Here>
}
但有时,您想根据帖子的确切原因做一些具体的事情。这是您可以实现处理程序方法的地方。
public async Task OnPostButton()
{
<Do button stuff here>
}
如果您想使用按钮方法,您只需创建一个指示其处理方法的 ASP Button。
<form asp-page-handler="button" method="post">
<button class="btn btn-default">Button</button>
</form>
这将告诉 razor 页面在结果按钮的查询字符串中添加对按钮处理程序方法的引用,如下所示。
<form method="post" action="/page?handler=button">
访问它将告诉 Razor 使用命名的处理程序方法。只要处理程序的名称与函数名称和 HTTP 方法的名称匹配,它就会运行该函数。
您的代码如下所示:
@{
protected void print()
{
@<p>WELCOME!</p>
}
public async Task OnPostPrint()
{
print();
}
}
<form asp-page-handler="Print" method="post">
<button class="btn btn-default">CLICK ME</button>
</form>
别忘了,这只会调用 OnPostPrint 方法。如果您每次发布时都需要运行东西,那么它也需要采用该方法。可能最好将这些任务分解为一个单独的函数,然后从 post 方法中调用它。使其更易于维护。
有关方法处理程序的更多信息,包括如何向它们添加变量,请查看 Mikes DotNetting!他很好地解释了这一点,我觉得我从他的文章中学到了很多东西。
https://www.mikesdotnetting.com/article/308/razor-pages-understanding-handler-methods