从 JavaScript 调用 ASP.NET 代码隐藏函数

IT技术 javascript jquery asp.net
2021-02-23 11:38:26

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

6个回答

是的,您可以制作网络方法,例如..

<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:您是否需要使用 aScriptManager才能使其正常工作?你能显示那个标记吗?
2021-04-20 11:38:26
是的,这是进行 AJAX 调用的一种方式。
2021-05-16 11:38:26

我更喜欢 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 和脚本管理器注入的脚本相比,您可以节省 30kb javascript

cs函数

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

在脚本 cs 功能调用中使用 scriptmanager

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

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

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

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

@Aristos - 你不能“调用”一个页面。您可以发出 HTTP 请求,但不能保证有另一个 HTTP 代理在端点地址上侦听,或者该代理会响应,或者响应不会是中介返回的先前请求的缓存副本。换句话说 - 不能保证代码将作为该 HTTP 请求的结果执行。(嗯,从广义上讲,代码将始终被执行,当然,但它很可能不是您想要/期望的代码:-))
2021-04-23 11:38:26
@Aristos - 您打算如何在不使用 AJAX 的情况下从浏览器调用服务器端方法?
2021-04-30 11:38:26
@Michael 您只需使用参数调用页面,然后在页面上返回 204 状态代码。进行测试以查看它。:)
2021-05-05 11:38:26
@Fanci @Michale 我在这里用 204 状态代码示例给出了答案。
2021-05-14 11:38:26
@Michael 是的,您无法向用户提供代码最终运行的反馈。好吧,这只是一个例子和一种调用方式,不是完美的,只是一种方式。如何以这种方式如果代码未执行,则 204 不会返回并且出现页面无法加载的空页面。
2021-05-16 11:38:26

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

请参阅在 javascript 中调用 __doPostBack