Javascript 事件处理程序来触发 C# 方法

本文关键字:方法 事件处理 程序 Javascript | 更新日期: 2023-09-27 17:55:11

我一直在研究的一个.NET应用程序挂在某个函数调用上。我想知道是否有一种方法可以让事件处理程序"触发"C# 函数,而不是调用它并等待返回;换句话说,我需要它继续运行Javascript代码而不是等待。我将如何实现此功能?

下面是一个代码大纲:

爪哇语

// Fires on user scroll event
function ScrollHandler() {
    //...
    // Calls the following C# function when a user scrolls
    window.external.UserScroll();
}
// Called by C# function UpLoadJson()
function drawTimeline(JsonData) { 
    //...
}

C#

// Called by Javascript function ScrollHandler()
void UserScroll()
{
    //...
    UpLoadJson();
}
void UpLoadJson()
{
    //...
    browser.Document.InvokeScript("drawTimeline", new String[] {data});
}

使用" ->"来表示函数调用,我认为正在发生的事情是:

ScrollHandler(/*JS*/) -> UserScroll(/*C#*/) -> UpLoadJson(/*C#*/) -> drawTimeline(/*JS*/)

但是Javascript不能运行drawTimeline()因为它正在等待ScrollHandler()首先返回;在调用drawTimeline()之前,它不能返回。我需要ScrollHandler()回来而不等UserScroll()回来。

@fabjan代码:

    $(document).ready(function() {
        $.ajax({
            url: window.external.HandleScroll(left, right),
            type: "GET"
        })
        // seems like this part would be optional, since calling HandleScroll() will
        // result in the draw function if it needs to
        /*.done(function (jsondata) {
            drawTimeline(jsondata);
        })*/
        .fail(function (err) {
            alert(err.statusText);
        });
    });

Javascript 事件处理程序来触发 C# 方法

尝试使用 JQuery Ajax 获取/发布请求和回调方法:

$.ajax({
    url: (your controller/actionname),
    type: "GET",
}).done(function (jsondata) {
    some code here...
}).fail(function (err) {
    alert(err.statusText);
});