【问题标题】:Calling ASP.NET Code Behind function from JavaScript从 JavaScript 调用 ASP.NET 代码隐藏函数
【发布时间】:2010-03-26 05:56:18
【问题描述】:

是否可以从 JavaScript 调用 ASP.NET 代码隐藏函数。

【问题讨论】:

标签: javascript jquery asp.net


【解决方案1】:

是的,你可以制作像这样的网络方法..

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

然后在javascript中调用..

PageMethods.updateTabContent(parameterValueIfAny, onSuccessMethod,onFailMethod);

这个也需要加

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

【讨论】:

  • @Muhammad:您是否需要使用ScriptManager 才能使其工作?请你显示那个标记好吗?
  • 是的,这是进行 AJAX 调用的一种方式。
【解决方案2】:

我更喜欢 Muhammad Akhtar PageMethod 方法。只是一个简短的说明:您不需要脚本管理器。脚本管理器只为您生成 javascript 代理方法。如果您的页面上已经有 JQuery,您可以忘记脚本管理器并在您的页面上编写类似的内容:

<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 内容的 div。 好处是与 jquery 和 scriptmanager 注入的脚本相比,您节省了 30kb javascript

【讨论】:

    【解决方案3】:

    cs函数

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

    使用scriptmanager调用脚本cs函数

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

    【讨论】:

      【解决方案4】:

      不,不能直接从 Javascript 调用函数背后的 ASP.NET 代码。背后的 ASP.NET 代码在 ASP.NET 工作进程的上下文中在服务器上执行。 Javascript 在客户端浏览器的上下文中在客户端上执行。

      Javascript 触发执行 ASP.NET 代码的唯一方法是通过从 Javascript 到服务器的 AJAX 调用。

      【讨论】:

      • @Aristos - 您打算如何在不使用 AJAX 的情况下从浏览器调用服务器端方法?
      • @Michael 您只需使用您的参数调用一个页面,然后在页面上返回 204 状态代码。做一个测试看看。 :)
      • @Aristos - 你不能“调用”页面。您可以发出 HTTP 请求,但不能保证有另一个 HTTP 代理在端点地址上侦听,或者该代理会响应,或者响应不会是中介返回的先前请求的缓存副本。换句话说 - 不能保证该 HTTP 请求会执行代码。 (嗯,从广义上讲,当然,代码总是会被执行,但它很可能不是你想要/期望的代码:-))
      • @Fanci @Michale 我在这里用 204 状态代码示例回答。
      • @Michael 是的,您无法向用户反馈代码最终运行。好吧,这只是一个例子和一种称呼方式,不是完美的,只是一种方式。如果代码没有执行,那么这种方式不会返回 204,并且会出现一个无法加载页面的空页面。
      【解决方案5】:

      您可以使用__doPostBack 从 javascript 进行回发。只需添加一个具有 AutoPostBack 属性的服务器控件并将其设置为 true。

      Calling __doPostBack in javascript

      【讨论】:

        【解决方案6】:

        如果您正在处理非 Ajax 项目,您可以尝试 System.Web.UI.ICallbackEventHandler。

        这里的示例:

        http://msdn.microsoft.com/en-us/library/ms178210.aspx

        http://www.ajaxmatters.com/2006/05/using-icallbackeventhandler-in-asp-net/

        【讨论】:

        • 这仍然在后台使用 ajax - 对服务器进行越界 HTTP 调用。
        猜你喜欢
        • 1970-01-01
        • 2012-03-11
        • 1970-01-01
        • 2015-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多