CefSharp - 从C#方法返回给JS的无效(?)数据

问题描述 投票:1回答:2

我从C#返回到JS的数据有问题。 CefSharp配置:

        Cef.Initialize();
        CefSharpSettings.WcfEnabled = true;
        CefSharpSettings.LegacyJavascriptBindingEnabled = true;
        browser = new ChromiumWebBrowser("")
        {
            Dock = DockStyle.Fill
        };
        this.Controls.Add(browser);
        SM = new ScriptManager(browser);
        browser.RegisterAsyncJsObject("external", SM); //"Support" for C# methods from JavaScript

我试图从JS调用C#方法:

...
var UserID_array = window.external.loadUsrIDs(usr_names); //usr_name -> array of user names

在C#中,方法的声明如下:

class ScriptManager
{
  ...

  public int[] loadUsrIDs(object usr_names = null) //by default if usr_names == null then return all user IDs
  {
    ...//reading the database

   return id_users.ToArray();   //from List<int> to int[]
  }

}

不幸的是,我总是得到以下值([object Promise])而不是Int数组(int []) - 测试代码:

var UserID_array = window.external.loadUsrIDs(usr_names);
alert(UserID_array); //alert - only for tests

//Alert function always return value: **[object Promise]**

如何通过JS中的C#方法访问返回的数据?

问候

马尔钦

javascript c# .net chromium-embedded cefsharp
2个回答
0
投票

尝试使用

var UserID_array = await window.external.loadUsrIDs(usr_names);

0
投票

你需要等待回应。

调用C#函数后,将结果分配给变量(就像您已经完成的那样)。

然后使用then(成功,失败)功能来使用数据。

var UserID_array = window.external.loadUsrIDs(usr_names);

UserID_array.then(
    function(result) {
        doSomethingWithYourData(result);            
    }, function (err) { 
        console.log(err); 
    });

这使您的页面响应更快,允许用户界面在等待您的数据时继续响应您的用户。

© www.soinside.com 2019 - 2024. All rights reserved.