فراخوانی یک متد غیر static در Blazor توسط DotNet.invokeMethodAsync
آخرین بروز رسانی: 1401/06/06
میدونیم که blazor این امکان رو داره که بتوینم از داخل کد جاوااسکریپت متد c# رو صدا بزنیم.
اما متد مورد نظر باید
-
-
-
-
-
-
-
- static باشه
- -با اتریبوت [JSInvokable] علامتگذاری شده باشه
-
-
-
-
-
-
برای صدازدنش هم میتوینم به روش زیر عمل کنیم
DotNet.invokeMethodAsync('namespace_of_code', 'csharpMethodName', [parameters]);
//namespace_of_code => در حالت عادی میتونه namespace خود پروژه باشه
//[parameters] => اختیاریه و میتونه خالی باشه اگر متد شما ورودی نداره
حالا بعضی وقتها پیش میاد که میخایم یه متد داخل component blazor رو که با اتریبوت [JSInvokable] علامت گذاری شده رو صدا بزنیم
اما حالا اگر به هر دلیلی (مثل اینکه در بدنه متد از متغییرهایی استفاده کردیم که اونا static نیستن) نمی تونیم متد رو static کنیم.
در اینجور مواقع میتونید از پترن زیر برای این کار استفاده کنید
protected override void OnInitialized()
{
base.OnInitialized();
_actionAsync= _noneStaticFunc;
}
[JSInvokable]
public static async Task StaticFuncToBeCalledByJs(string value)=> await _actionAsync.Invoke(value);
static Func<string, Task> _actionAsync;
async Task _noneStaticFunc(string value)
{
//your code
}