我从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#方法访问返回的数据?
问候
马尔钦
尝试使用
var UserID_array = await window.external.loadUsrIDs(usr_names);
你需要等待回应。
调用C#函数后,将结果分配给变量(就像您已经完成的那样)。
然后使用then(成功,失败)功能来使用数据。
var UserID_array = window.external.loadUsrIDs(usr_names);
UserID_array.then(
function(result) {
doSomethingWithYourData(result);
}, function (err) {
console.log(err);
});
这使您的页面响应更快,允许用户界面在等待您的数据时继续响应您的用户。