<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      23.C#和JS互操作

      23.1 C#調用JS,使用IJSRuntime

      js代碼:
      <button onclick="javascript:alter("提示信息")">點我彈出提示</button>
      C#調用JS:JsInteractive.razor頁面代碼,InvokeVoidAsync()方法和InvokeAsync() 方法

      @Page "/jsinteractive"
      <button @onclick="ShowAlter">點我彈出提示</button>
      <button @onclick="Prompt">點我彈出框</button>
      您輸入的姓名是:@Value
      
      @inject IJSRuntime JS
      @code
      {
      string? Value{get;set;}
      async Task ShowAlert()
          {
              await JS.InvokeVoidAsync("alert","提示信息");
          }
      async Task Prompt()
          {
             Value = await JS.InvokeAsync<string>("prompt","請輸入姓名");
          }
      }
      

      23.2 JS調用C#的方法一(不推薦),JS調用C#靜態方法

      • 1.要求C#方法必須是靜態方法
      • 2.必須在靜態方法上打上[JSInvokable]特性標簽
      • 3.在js中使用靜態對象DotNet,同步方法使用DotNet.invokeMethod('C#程序集','方法名','參數1','參數2'...) ;異步方法使用DotNet.invokeMethodAsync('C#程序集','方法名','參數1','參數2'...)

      23.3 JS調用C#的方法二(推薦),JS調用C#實例方法

      • 1.方法是public
      • 2.必須在方法上打上[JSInvokable]特性標簽
      • 3.用C#代碼轉寫一個方法
        包含將來要被js調用的方法Add()和AddAsync()的C#類 JsFunc
      public class JsFunc
      {
          [JSInvokable]
          public int Add()
          {
              return 1+5;
          }
          [JSInvokable]
          public Task<int> AddAsync()
          {
              return Task.FromResult(1+5);
          }
      }
      

      做轉寫,JsInteractive.razor

      @Page "/js"
      <button @onclick="Add">Add</button>
      <button @onclick="AddAsync">AddAsync</button>
      @Inject IJSRuntime JS
      @code
      {
          async Task Add()
          {
              var js = DotNetObjectReference.Create(new JsFunc());
              await JS.InvokeVoidAsync("add",js);
          }
          async Task AddAsync()
          {
              var js = DotNetObjectReference.Create(new JsFunc());
              await JS.InvokeVoidAsync("addAsync",js);
          }
      }
      
      

      js 調用方 app.js

      function add(dotNet)
      {
          let result = dtonet.invikeMethod('Add');
          console.log(result);
      }
      function addAsync(dotNet)
      {
          let result = dtonet.invikeMethodAsync('AddAsync');
          console.log(result);
      }
      

      24. 訪問WEB API

      • 1.注冊 HttpClient 服務
        builder.Services.AddScoped(new HttpClient{BaseAddress="http://localhost:7008"});
        有時要注冊跨域服務:
        builder.Services.AddCors(options=>options.AddPolicy("any",builder=>builder.AllowAnyOrigin().AllowAnyHeader().AddlowAnyMethod()));
        跨域還需啟用跨域中間件:
        app.UseCors("any");
      • 2.在要使用HttpClient的razor頁面依賴注入httpClient實例
        @inject HttpClient httpClient
      • 3.調用http crud方法
      IEnumberable<WeatherForCast>? Data{get;set;} = [];
      async Task GetDataAsync()
      {
      	Data = awiat httpClient.GetFromJsonAsync<IEnumberable<WeatherForCast>>("weatherforecast");
      }
      
      • 說明
        以上注冊和注入工作,適用于webassembly或auto呈現方式型項目,當是auto型時要將HttpClient服務注冊寫在用項目模版自動創建的兩個項目中的Client項目中。
        如果是Server呈現模式,直接可以使用服務器端的HttpClient
      posted on 2024-03-31 19:33  hrx521  閱讀(148)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 美女高潮黄又色高清视频免费| 毛片无遮挡高清免费| 玩弄丰满少妇人妻视频| 亚洲精品一区二区三区不| 久久精品第九区免费观看| 中国亚州女人69内射少妇| 国产AV巨作丝袜秘书| 国产福利精品一区二区| 色伦专区97中文字幕| 伽师县| 中文字幕av日韩有码| 女人张开腿让男人桶爽| 中文字幕日本六区小电影| 久久精品国产亚洲av麻| 亚洲国产综合一区二区精品| 最新国产精品拍自在线播放| 精品久久久久久无码人妻蜜桃| 久久香蕉国产线看观看怡红院妓院| 亚洲五月天综合| 精品一区二区三区少妇蜜臀| 日产国产一区二区不卡| 成人午夜视频在线| 国产jizzjizz视频| 人妻一区二区三区人妻黄色| 色综合久久中文综合久久激情| 欧美国产精品啪啪| 熟女精品国产一区二区三区| 曰韩无码二三区中文字幕| 久青草国产综合视频在线| 日韩不卡一区二区三区四区| 精品久久人人妻人人做精品| 韩国午夜福利片在线观看| 久久综合免费一区二区三区| 在线日韩日本国产亚洲| 亚洲香蕉av一区二区蜜桃| 九九热视频在线精品18| 人妻熟女av一区二区三区| 日韩区中文字幕在线观看| 少妇人妻偷人精品系列| 久久久精品人妻一区二区三区蜜桃| 老妇女性较大毛片|