Luc*_*cky 1 c# asp.net razor asp.net-core blazor
我的主要目标是每当用户滚动到页面底部时调用 C# 方法。我寻找单独使用 blazor 的解决方案,但找不到。
因此,我使用 jQuery 注册滚动事件,然后使用 JSInvokable 调用 C# 方法。
jQuery 代码:
<script>
//Used to register scroll event.
$(window).scroll(function () {
if ($(window).scrollTop() + $(window).height() == $(document).height()) {
DotNet.invokeMethodAsync('Blazor-Example', 'OnScroll');
}
});
</script>
Run Code Online (Sandbox Code Playgroud)
.Net 代码(在 .razor 页面中):
@code {
//This is called from jquery
[JSInvokable("OnScroll")]
public static void OnScroll()
{
//TODO: How to get hold of the razor component instance?
}
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我想在 .razor 页面中调用实例方法,而不是静态方法。
换句话说:如何从 JavaScript 获取 razor 页面的实例?
我尝试使用在 OnInitialized() 期间设置的类型的静态实例__generated__[Name_of_the_razor_page],但随后我的代码无法编译且不显示任何错误。
如果无法获取剃刀组件的实例,是否有其他方法来注册我的滚动事件?
您需要将 a 发送DotNetObjectReference到您的 javascript 并使用此引用来调用您的回调:
@inject IJSRuntime jsRuntime
...
@code {
protected override void OnInitialized()
{
jsRuntime.InvokeVoidAsync("scroll.init", DotNetObjectReference.Create(this))
}
//This is called from jquery
[JSInvokable("OnScroll")]
public void OnScroll()
{
//TODO: How to get hold of the razor component instance?
}
}
Run Code Online (Sandbox Code Playgroud)
window.scroll = {
init: dotnetHelper => {
$(window).scroll(function () {
if ($(window).scrollTop() + $(window).height() == $(document).height()) {
dotnetHelper.invokeMethodAsync('OnScroll')
.then(_ => { });
}
})
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2326 次 |
| 最近记录: |