BLAZOR:使用组件基类模型时,当页面加载时自动触发Onclick事件

4
我有一个如下的 Razor 页面。它继承了 PaymentBase 类,该类具有后台代码。
@page "/payment"
@inherits PaymentBase

<h1>Payments</h1>

<button class="btn btn-primary" onclick="@GetList()">List all payments</button>

GetList 函数会在页面渲染完毕后自动触发,而不是在单击事件中触发。

2个回答

4
onclick="@GetList()"

上述代码在组件被渲染时执行,因为指令@GetList()被评估为执行GetList方法的结果,该结果被分配给按钮元素的onclick属性。
注意:onclick是按钮元素的属性,但@onclick是编译器指令属性,指示编译器创建一个封装方法的EventCallback'委托',其名称作为此属性的值提供。
始终使用模式:@onclick="<MethodName>" 请注意,以下代码是合法的,但不建议将C#和JavaScript无必要地结合使用:onclick="window.prompt('Enter you name...')" 希望这有所帮助...

在这种情况下,您如何将参数传递给函数? - Natthapol Vanasrivilai
哦,没事了。找到答案了。 可以使用lambda表达式将参数传递给函数。 @onclick=(() => GetList(parameter)) - Natthapol Vanasrivilai

3
您需要传递一个函数,而不是调用该函数。
<button class="btn btn-primary" @onclick="GetList">List all payments</button>

通过使用 @onclick="GetList",你将一个函数传递给了 onclick,而通过使用 @onclick="GetList()",你正在调用 GetList 并将 GetList() 的返回值传递给 onclick

同时不要忘记在 onclick 前面加上 @ 符号。


使用您的解决方案,我得到了“当前上下文中不存在onclick名称”的错误,并且对于函数名称,它抱怨“缺少属性名称”。注意:我是在C#代码后台文件中调用函数,而不是在Razor页面本身中。 - suraj singh
@surajsingh 抱歉,是我的错误,请看一下我的答案,现在应该可以工作了。 - Vencovsky
@surajsingh,你使用的是哪个版本的Blazor和.NET? - Vencovsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接