Blazor入手教程(九)c#和js互相調用


Blazor入手教程(九)c#js互相調用

 

1,C#調用js代碼

C#調用js代碼有兩步

1,razor頁面頂部使用@inject注入所需要的類

2,在代碼中調用

 

 我們嘗試在頁面中寫了一段js,然后vs告訴我們script標簽不能出現在razor內部,可以把它放在入口的index.html文件中,或者單獨建一個js文件,然后在index.html引入。

 

我們把它移到在入口的index.html文件中,再次運行

 

 點擊按鈕,可以看到我們調用成功了,並且也獲取到了參數

 

 

 

 

 

2js調用c#靜態方法

Js調用c#靜態方法也有兩步

1,聲明一個C#靜態方法,並標記上 [JSInvokable]的特性

2,js中使用DotNet.invokeMethod DotNet.invokeMethodAsync調用

 

DotNet.invokeMethod(“程序集名”,”方法名”,”參數...[多項,可空]”)

調用帶參數的方法

 

 

 

 

 

 

 

調用帶返回值的方法

 

 

 

異步調用

Js異步調用時返回值是一個promise,(js語言中處理異步的一種方式)。可以在回調then里面獲取到返回值

 

 

 

指定方法名的調用

可以通過 [JSInvokable("新的方法名")]指定js調用的方法名

 

 

 

 

這是在瀏覽器中運行的效果

 

 

 

C#代碼:

@page "/invokejs"
@inject IJSRuntime JsRuntime

<h3>c#代碼和js代碼的互相調用</h3>



<h3>c#調用JS</h3>
<button @onclick="todo">Invoke</button>

@code {

    public void todo()
    {

        var jsRunResult = JsRuntime.InvokeAsync<string>("demoMethods.runJs", "參數1", "參數2");
    }
}

<h3>JS調用C#</h3>

 
 
<button onclick="demoMethods.jsInvokeC('參數1','參數2')">帶參數調用</button>
<button onclick="demoMethods.jsInvokeCWithReturn()">調用帶返回值的</button>
<button onclick="demoMethods.jsInvokeCAsync()">異步調用</button>
<button onclick="demoMethods.jsInvokeCAlisa()">指定方法名調用</button>


@code {

   
    //調用帶參數方法
    [JSInvokable]
    public static void todo(object a1, object a2)
    {

        Console.WriteLine("js調用c#成功");
        Console.WriteLine("參數1" + a1.ToString());
        Console.WriteLine("參數2" + a2.ToString());
    }



    //帶返回值的方法
    [JSInvokable]
    public static string todoWithReturn()
    {

        Console.WriteLine("todoWithReturn調用成功");
        return System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
    }


    //指定方法名
    [JSInvokable("todoThree")]
    public static void todoAlisa()
    {

        Console.WriteLine("todoAlisa調用成功");

    }
}
}

js代碼

 

   <script>

 
         
        window.demoMethods = {
            runJs: function (a1, a2) {

                console.log("調用js成功")
                console.log("參數1=" + a1);
                console.log("參數2=" + a2);
            },
            jsInvokeC: function (a1, a2) {
                //DotNet.invokeMethod 或 DotNet.invokeMethodAsync 
                DotNet.invokeMethod("BlazorApp1", "todo", a1, a2);
               
            },
           
            jsInvokeCWithReturn: function () {
                //帶返回值 
                var r = DotNet.invokeMethod("BlazorApp1", "todoWithReturn" );
                console.log("jsInvokeCWithReturn r=", r);
            },

            jsInvokeCAsync: function (a1, a2) {
                //異步調用 
                DotNet.invokeMethodAsync("BlazorApp1", "todoWithReturn").then(data => {

                    console.log("jsInvokeCAsync,data=",data);
                });
            },
            jsInvokeCAlisa: function ( ) {
                
                //指定名稱
                DotNet.invokeMethod("BlazorApp1", "todoThree" );
              
            },

        }

    </script>

 需要調用的c#代碼可以寫在任意的地方不僅僅是razor文件里面。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM