从JavaScript调用ASP.NET Code Behind函数

7
能否从JavaScript调用ASP.NET代码后台函数?

1
为什么这个问题没有被标记为重复?http://stackoverflow.com/questions/3709426/call-server-side-function-from-client-side-javascript-closed - Ian Mercer
1
可能是重复的问题:通过JQuery调用ASP.NET服务器端方法 - roryf
6个回答

11

我更喜欢Muhammad Akhtar的PageMethod方法。只有一个小提示:你不需要ScriptManager。ScriptManager只是为您生成JavaScript代理方法。如果您的页面已经有jQuery,您可以忘记ScriptManager并在您的页面上编写类似于下面这样的代码:

<script type ="text/javascript">
    $(document).ready(function() {
        $("#AjaxLink").click(function(e) {
            e.preventDefault();
            $.ajax({
                type: "POST",
                url: "YourPage.aspx/updateContent",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(result) {
                    $("#content").html(result.d);
                }
            });
        });
     });
</script>

这假设您的页面上有一个ID为AjaxLink的链接和一个显示结果的ID为content的div元素。 好处是相比于使用jQuery和脚本管理器注入的脚本,可以节省30kb的Javascript。


10

是的,您可以创建类似于以下示例的 Web 方法:

<WebMethod(EnableSession:=True), ScriptMethod()> _ 
Public Shared Function updateContent() As String
      Return "Your String"
    End Function

然后在JavaScript中调用,如下所示...
PageMethods.updateTabContent(parameterValueIfAny, onSuccessMethod,onFailMethod);

this also need to add

<asp:ScriptManager ID="ScriptMgr" runat="server" EnablePageMethods="true">
                </asp:ScriptManager>

@Muhammad:你需要使用ScriptManager才能使其正常工作吗?请展示一下标记,谢谢。 - John Saunders
是的,这是一种进行 AJAX 调用的方法。 - Franci Penov

4

cs function

[System.Web.Services.WebMethod]
public static string set_single_amount(arg a1)
{
     return value;
}

在脚本中使用ScriptManager调用函数

$("#control").click(function()
{
  PageMethods.set_single_amount(value,afercalling)
});

function afercalling(result)
{
alert(result);
}

3
不,直接从Javascript调用ASP.NET后端函数是不可能的。ASP.NET后端在ASP.NET工作进程上下文中在服务器上执行。Javascript在客户端浏览器上下文中执行。
唯一的方式是通过从Javascript向服务器发出AJAX调用来触发ASP.NET后端代码的执行。

@Aristos - 你打算如何在不使用AJAX的情况下从浏览器调用服务器端方法? - Michael Shimmins
@Michael,你只需调用带有参数的页面,在页面上返回204状态码。进行测试以查看结果。 :) - Aristos
@Aristos - 你不能“调用”一个页面。你可以发起一个HTTP请求,但是没有任何保证有另一个HTTP代理在端点地址上监听,或者该代理会响应,或者响应不是由中介返回的先前请求的缓存副本。换句话说 - 没有保证代码将作为该HTTP请求的结果执行。(当然,广义上讲,_一段代码_总是会被执行的,但它可能不是你想要/期望的那段代码 :-)) - Franci Penov
@Fanci @Michale 我在这里附上了一个状态码为204的示例答案。 - Aristos
@Michael 是的,你无法得到有关用户代码最终运行的反馈。好的,这只是一个示例和调用它的方式,并不是完美的方式,只是一种方式。然而,如果代码没有执行,这种方式就不会返回204,而是出现一个空页面,页面无法加载。 - Aristos

1

0

1
这仍然在幕后使用ajax - 以向服务器发出越界的HTTP调用。 - Michael Shimmins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接