在一個blazor應用程式上作業,它有一個需要從JS中呼叫的方法! 當我試圖呼叫沒有靜態關鍵字的方法時,我得到了這個錯誤 -
。 The assembly 'AssemblyName'不包含公共可呼叫方法with [JSInvokableAttribute("INIT_COMPLIANCE")]。
只要我加入靜態,它就能識別并正常加載。
以下是我在blazor組件中的代碼 -
protected override Task OnInitializedAsync()
{
jsToDotNetBridgeReference = DotNetObjectReference.Create(this)。
js.InvokeVoidAsync("SetDotNetReference"/span>, jsToDotNetBridgeReference)。
returnbase.OnInitializedAsync()。
}
[JSInvokableAttribute("INIT_COMPLIANCE") ]
public async void InitComplianceComponent(string token)
{
id_token = token;
Console.WriteLine(token)。
await GetData()。
JS -
self.addNewCompliance = function () {
const url = someurl;
var resource = window.authContext.getResourceForEndpoint(url)。
window.authContext.acquireToken(resource, function(error, token){
//處理ADAL錯誤。
if (error || !token) {
console.log('ADAL Error Occurred: '/span> error)。
return;
} else {
Blazor.start().then(() => {
window.InitComplianceComponent(window.DotNet, token) 。
})
//window.InitComplianceComponent(window.DotNet, token);。
}
});
}
BlazorInterop.js
InitComplianceComponent = function (dotnetObj, token) {
dotnetObj.invokeMethod("AssemblyName"/span>, "INIT_COMPLIANCE"/span>, token)。
}
我不想使用靜態關鍵字,因為GetData是非靜態方法,我不能從靜態方法中呼叫它。
我在哪里錯了。
我在哪里錯了。
uj5u.com熱心網友回復:
你可以這樣做:
protected override async Task OnInitializedAsync()
{
await JSRuntime.InvokeVoidAsync("yourJsFunctionName",
DotNetObjectReference. Create(this), nameof(MethodToInvokeFromJs) )。)
}
[JSInvokable]
public void MethodToInvokeFromJs()
{
//你的代碼。
StateHasChanged()。
而你的js代碼將看起來像這樣:
你的js代碼將看起來像這樣:
function yourJsFunctionName(instance, callback) {
instance.invokeMethodAsync(callback)。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/332314.html
標籤:
上一篇:EF核心和SQL多級聯動
下一篇:在資料的頂部插入一行列名的日名。
