我们可以从 JavaScript Post 方法调用 aspx.cs 中的非静态函数吗

Posted

技术标签:

【中文标题】我们可以从 JavaScript Post 方法调用 aspx.cs 中的非静态函数吗【英文标题】:Can we call non-static function in aspx.cs from JavaScript Post Method 【发布时间】:2020-12-15 05:56:36 【问题描述】:

我想详细了解这些调用的工作原理。我知道我们可以在从 System.Web.Services.WebService 派生的 Web 窗体中声明一个服务类,并且在使用此 [WebMethod( EnableSession = true)].

我的 aspx 页面及其 后端 aspx.cs 文件仅包含公共类。有什么方法可以调用这些 aspx.cs 文件中的函数在那些公共课程中。静态和非静态函数两者。如果不是,它背后的原因是什么,如果是,那么它是如何工作的。

这篇文章是为了更深入地了解网络表单的结构和工作方式。

【问题讨论】:

【参考方案1】:

方法必须是静态的。每个页面的静态方法完全相同。因为它是一个网页,所以多个用户可以访问它。如果您网站上的 4 位用户打开了页面,并且某个方法显示“Do x”,则它必须能够为每个人执行完全相同的操作。

例如,对页面方法的一个常见误解:您无法从静态 WebMethod/Page Method 访问页面上的控件。如果方法说“更新此控件”,应该在哪个页面上更新哪个控件?用户 1、2、3 还是 4?这是不可能知道的。

您必须将数据/信息从代码隐藏方法返回到调用该方法的 javascript 方法,然后从 javascript 方法更新您页面的控件。

Hth.

More

【讨论】:

我理解这部分。但是,当我们调用时,我们可以在代码后面访问会话,如果它无法更新控件而不知道它是用户 1、2、3 还是 4,那么它如何知道这是哪个会话?如果它知道会话,那么为什么不更新控制。 ? 会话不是页面的一部分,它是应用程序的一部分。请参阅 Global.asax。您可以从页面访问 if 但它不是页面。我想我知道你在说什么,但我认为这与能够从 js 访问改变事物的代码有关。 如果你回传一个页面,服务器可以处理一切;如果您在没有回发页面的情况下访问后面的代码,则服务器无法假设有关页面的任何内容,它没有足够的信息。 我正在寻找一个可能有帮助的链接,但该网站已失效。毕竟我不确定我是否可以完全正确地解释它。不过我明白了你的问题。【参考方案2】:

无法使用 javascript / jQuery 从客户端调用非静态方法。要使用 javascript 调用非静态方法,您可以使用一些不同的方法,例如使用 Web 服务、WCF 服务等。

我将解释如何使用 javascript 通过 Web 服务调用非静态方法:

首先在我的例子中创建一个新的 Web 应用程序,应用程序名称是“WebApplicationDemo”。

我在这个名为“WebService1.asmx”的项目中添加了webservice。

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

namespace WebApplicationDemo

/// <summary>
/// Summary description for WebService1
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
public class WebService1 : System.Web.Services.WebService


[WebMethod]
public string HelloWorld(string strName)

return "Hello " + strName + ", The current time is = " + DateTime.Now + "";



构建您的项目,然后添加一个名为“WebForm1.aspx”的新网络表单。

代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplicationDemo.WebForm1" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>

<script type="text/javascript">
function getTime() 
var name = document.getElementById("txtName").value;
WebApplicationDemo.WebService1.HelloWorld(name, getTimeSuccess, getTimeError);

function getTimeSuccess(result) 
alert(result);

function getTimeError(error) 
alert(error);


</script>

</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/WebService1.asmx" />
</Services>
</asp:ScriptManager>
<div style="font-family: Arial">
<asp:Label runat="server" Text="Enter Your Name"></asp:Label>
<asp:TextBox runat="server" ID="txtName" Height="20" Width="150"></asp:TextBox>
<input type="button" id="btnGetTime" value="Submit" onclick="getTime()" />
</div>
</form>
</body>
</html>

现在在网络浏览器中运行该项目,您将获得文本框和按钮,在我的情况下,我在文本框中输入“Purvesh”,然后按提交。它确实会调用包含我的非静态方法的服务并返回结果。

输出

您好 Purvesh,当前时间是 = 18-Sep-15 4:04:10 PM

【讨论】:

以上是关于我们可以从 JavaScript Post 方法调用 aspx.cs 中的非静态函数吗的主要内容,如果未能解决你的问题,请参考以下文章

Tornado之接口调用时方式执行顺序

Javascript:从字符串调用以匿名函数编写的函数,函数名称没有eval?

如何使用 POST 方法将 javascript/jQuery 变量传递给 PHP [重复]

java调http接口 post方式请求 服务器识别全是乱码 服务器识别utf-8的内容 哪位大神知道怎么解决吗?

统一日志输出打印POST请求参数

在支持 POST 的同时在不使用 Selenium 的情况下渲染 JSON/Javascript 后从网页中抓取 HTML