如何从Blazor C#代码制作window.history.go(-1)?

时间:2018-12-24 09:02:13

标签: blazor

如何在Blazor上使用c#代码制作window.history.go(-1)?

我尝试使用JSRuntime.Current.InvokeAsync

JSRuntime.Current.InvokeAsync< string >( "history.go", new[] {-1} );
JSRuntime.Current.InvokeAsync< string >( "top.history.go", new[] {-1} );
JSRuntime.Current.InvokeAsync< string >( "window.history.go", new[] {-1} );
JSRuntime.Current.InvokeAsync< string >( "window.top.history.go", new[] {-1} );

但是我得到了错误:在未实现接口历史记录的对象上被调用。

但是它可以通过cshtml进行工作:

<button id="BtnBack" type="button" onclick="window.history.go(-1)" class="btn btn-default">Back</button>

1 个答案:

答案 0 :(得分:0)

不确定细节,但是我相信要做这样的互操作,您需要对此更加明确。因此,如果您将此脚本放在index.html中(而不是我建议您在生产中使用的位置):

<script>
    window.test = {
        historyGo(value) {
            window.history.go(value);
        }
    };
</script>

然后将这段代码放入Blazor页面:

<button type="button" onclick="@OnClick">Go Back</button>

具有这样的事件处理程序:

private void OnClick()
{
    JSRuntime.Current.InvokeAsync<object>("test.historyGo", -1);
}

一切正常。我尝试了您采用的方法(在您自己的JS中没有显式的互操作层),同样也发现它不起作用。但这对我来说似乎是一个合理的解决方法。会对为什么 this 起作用而您的代码无效的原因感兴趣,但是希望这会有所帮助。