首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从WebService调用带有C#的javascript (.NET)

从WebService调用带有C#的javascript (.NET)
EN

Stack Overflow用户
提问于 2011-11-28 00:41:56
回答 2查看 1.1K关注 0票数 0

我有一个带有JavaScript的网页,它使用jQuery和AJAX调用C#方法。这可以很好地工作。如果可能的话,我想知道如何从C#代码中调用JavaScript函数。如果这是不可能的,有没有一个明智的替代方案?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-28 00:48:32

假设浏览器启动了交互

通常,您的服务器端C#代码将响应由客户端代码发起的交互。如果您正在寻找C#代码可以在没有浏览器请求的情况下启动交互的方法,请参阅下一节。

如果您正在处理整个页面响应,那么您当然可以只输出包含您希望发生的调用的script标记。确保script在它调用的函数已经由前面的script标记定义之后进行调用,如果要进行DOM交互,请确保将该脚本放在页面的底部(或者使用jQuery的ready特性)。

响应Ajax调用,C#代码可以返回包含JavaScript代码的字符串,然后页面中的代码将执行这些字符串(例如,通过eval或类似的方式),但通常最好避免这种情况。

相反,让C#代码返回数据以响应Ajax调用,并让页面内代码通过调用适当的函数来响应该数据。

两者的一种混合是让您的C#代码返回数据,该数据指示要调用的函数以及要为其提供的参数,并具有函数的映射,您可以使用函数名对其进行索引,例如:

代码语言:javascript
运行
复制
var functions = {
    foo: function(arg0, arg1) {
        alert("foo called with " + arg0 + "," + arg1);
    },
    bar: function(arg) {
        alert("bar called with " + arg);
    }
};
$.ajax({
    url:      "/path/to/resource",
    dataType: "json",
    success:  function(data) {
        if (data && data.fname && data.args) {
            functions[data.fname].apply(undefined, data.args);
        }
    }
});

在那里,您的C#代码将返回一个包含以JSON编码的信息的字符串,作为一个具有fname属性(给定函数名称的字符串)和args属性(要传递给函数的参数数组)的对象,jQuery将为您将其反序列化为对象。然后,我们使用其名称(functions[data.fname])在映射中查找函数对象,并使用内置的Function#apply调用它并传入参数。这是可行的,因为您可以使用点分语法和文字作为属性名称(obj.propName = 42),或者使用括号语法和字符串作为属性名称(obj["propName"] = 42)来引用JavaScript对象属性,在后一个示例中,字符串可以是任何表达式,包括变量或属性引用(name = "propName"; obj[name] = 42;)-这就是我们在functions映射中查找函数的方式。

我不是建议你这么做,只是说这是可能的。

如果您尝试让服务器启动交互

如果您希望服务器访问浏览器,则必须使用新的(不同支持的) web sockets API或各种Comet techniques在它们之间建立某种通信通道。

票数 3
EN

Stack Overflow用户

发布于 2011-11-28 01:00:08

Javascript函数不能直接从C#调用,相反,Javascript函数/代码块可以从C#代码中注册到页面,这些代码在渲染后调用或在必要时调用。

代码语言:javascript
运行
复制
//Register Script block for JS code
Page.ClientScript.RegisterClientScriptBlock(GetType(), "ScriptBlockKey", 
"<script> alert('JS alert written in C# code behind.');</script>", false);

//Register Script block for calling JS function
Page.ClientScript.RegisterClientScriptBlock(GetType(), "ScriptBlockKey", 
                  "SomeJSFunction();</script>", false);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8287133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档