`

请求aspx页面的WebMethod

    博客分类:
  • Ajax
阅读更多

Asp.net可以在aspx页面中添加ScriptManager,这样就允许将WebMethod添加在aspx页面中,而以往通常都是新建asmx文件,利用webservice提供webmethod供请求。这里列出利用ajax请求aspx页面中的webmethod的方法,当然也可以利用ScriptManager创建的PageMethods的js对象直接访问后台代码中的webmethod。

linktest.aspx代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="linktest.aspx.cs" Inherits="linktest" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<script type="text/javascript" src="MyJs/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="MyJs/jquery.json-2.3.min.js"></script>
    <script type="text/javascript">
        function g() {
            var flag = false;
            $.ajax({
                type: "POST",
                async: false,
                url: "linktest.aspx/InsertComment",
                //data: $.toJSON({ "thecontent1": 'hello' }),
                data: window.JSON.stringify({ "thecontent1": 'hello' }),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                error: function() { alert('出错了'); },
                success: function(json) {
                    if (json.d) {
                        alert("successs");
                        flag = true;
                    }
                    else {
                        alert("kao");
                    }
                }
            });
            return flag;
        }

        function f() { 
            $.ajax({
                type: "POST",
                async: true,
                url: "linktest.aspx/GetJsonObject",
                data: $.toJSON({ "p": 'hello' }),
                //data: window.JSON.stringify({ "thecontent1": 'hello' }),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                error: function() { alert('出错了'); },
                success: function(json) {
                    alert("" + json.d.key1 + json.d.keyofarray[2] + json.d.keyofobject.subkey);  
                }
            }); 
        }

        function h() {
            //不通过ajax,直接通过scriptmanager访问后台的pagemethod
            PageMethods.TestMethod("dlut", OnSucceeded1, OnFailed); //后两个参数为请求成功和失败的回调函数
        }
        function OnSucceeded1(result, userContext, methodName) {
            if (methodName == "TestMethod") {
                alert(result);
            } 
        }
        function OnFailed(error, userContext, methodName) {
            if (error !== null) {
                alert("error..");
            }
        }
        
    </script>
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="sm1" EnablePageMethods="true" runat="server" /> 
    <div>
         <a href="http://www.baidu.com" target="_blank" onclick="return g();">Go to baidu..</a>
         <br />
         <a href="http://www.sina.com.cn" target="_blank" onclick="f();">Go to sina..</a>
         <br />
         <input type="button" onclick="h();" value="Request PageMethod" />
    </div>
    </form>
</body>
</html>

 这里写了3个测试,前两个是通过Jquery的ajax,最后一个直接通过PageMethods请求pagemethod。要知道,aspx后台要想在新标签页中打开一个链接可有点不容易,这里利用A标签onclick里Ajax请求,如果onclick返回false,则不会跳转。

还要注意的是$.ajax的data参数,因为设置成了json格式,所以利用$.toJSON将js对象转换成json对象,其实用window.JSON.stringify也行,但是这个不是所有浏览器都奏效。

前台往后台传参数这样将js对象转换成json就行,只要里面的属性和后台的webmethod的参数对应就行,如果后台的webmethod的参数是一个C#对象,同样的,只要js对象的属性和C#对象的属性对应就可以了。

还要注意的就是ajax的async标志,这个很好理解。前台得到返回结果以后取得返回值记住是在json.d下。

后台代码linktest.aspx.cs代码如下:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;

public partial class linktest : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Session["test"] = "hey";
        }
    }

    [System.Web.Services.WebMethod]
    public static bool InsertComment(string thecontent1)
    {
        return thecontent1.Equals("hello");
    }

    [System.Web.Services.WebMethod]
    public static string TestMethod(string p)
    {
        return p + " data from back..";
    }

    [System.Web.Services.WebMethod]
    public static SortedDictionary<string, object> GetJsonObject(string p)
    {
        SortedDictionary<string, object> results = new SortedDictionary<string, object>();
        results.Add("key1","value1");
        results.Add("key2", p); 
        results.Add("keyofarray",new int[]{1, 2, 3});

        SortedDictionary<string, object> subitem = new SortedDictionary<string, object>();
        subitem.Add("subkey","hah");

        results.Add("keyofobject", subitem);

        return results;
    }

    [System.Web.Services.WebMethod(EnableSession=true)]
    public static SortedDictionary<string, object> ObjectParameterTest(Books p)
    {
        SortedDictionary<string, object> results = new SortedDictionary<string, object>();
        results.Add("key1", p.bookTitle);
        results.Add("key2", HttpContext.Current.Session["test"].ToString() ); 
        return results;
    }
}

 最后一个ObjectParameterTest方法的参数是一个C#对象,前台传递的时候只要json的属性跟它对应就可以了。这里还展示了怎样取到session。

分享到:
评论

相关推荐

    ASP.net中aspx与cs函数的互调

    本文将详细讲解如何在ASP.NET中实现aspx页面与aspx.cs文件之间的函数互调,以及在此过程中需要注意的关键点。 首先,我们需要理解ASP.NET的生命周期。一个ASP.NET Web Form页面的生命周期包括初始化、加载、回发...

    aspx实现ajax案例

    总的来说,这个案例将展示如何在ASP.NET ASPX页面中集成C#和Ajax技术,通过UpdatePanel实现页面的局部更新,并通过Web服务或PageMethod处理客户端请求,返回JSON数据,以此提高Web应用的交互性和效率。理解并掌握...

    vbs HTTP.txt

    根据给定文件的信息,我们可以提炼出以下IT领域的关键知识点,主要围绕VBS脚本、HTTP请求、XMLHTTP对象以及与ASPX页面交互的过程。 ### VBS脚本与HTTP请求 VBS(Visual Basic Script Edition)是一种轻量级的脚本...

    甩掉ashx和asmx使用jQuery.ajaxWebService请求WebMethod简练处理Ajax

    为了解决这一问题,我们可以通过在*** WebForm页面的后端代码(.aspx.cs文件)中定义WebMethod,以此来简化Ajax的处理过程。WebMethod允许我们在C#中创建一个公开的静态方法,并通过WebMethod属性标记,使其能够接收...

    jQuery调用WebMethod(PageMethod) NET2.0的方法

    - PageMethod是一种特殊的WebMethod,它不需要创建***的Web服务(.asmx)文件,而是直接在ASPX页面中编写。 - NET2.0是微软推出的一个基于.NET框架的开发平台版本,它包含许多用于Web开发的API和工具。 - 通过...

    repeat莹光棒及异步调用aspx中的方法.txt

    该函数会在用户点击某一行时触发,向服务器端发送POST请求,获取指定ID对应的项目列表,并更新页面上的`#ProjectList`元素。 #### 3. 服务器端方法 服务器端提供了一个名为`GetProjectByUnitId`的方法来处理客户端...

    ajax 插入 删除功能_aspx开发教程.rar

    此“ajax 插入 删除功能_aspx开发教程”着重讲解如何利用Ajax来实现在Web页面上动态地插入和删除数据,而无需完全刷新整个页面。在ASP.NET中,Ajax功能主要通过jQuery库以及ASP.NET AJAX控件来实现。 1. **jQuery库...

    微软Ajax异步调用页面后台类和WebSerivce例子

    在ASP.NET中,你可以创建一个与ASPX页面对应的后台类,将业务逻辑和页面逻辑分离。通过Ajax调用,可以在不重新加载整个页面的情况下调用这些后台方法,提高性能。例如,使用`PageMethods`或者`UpdatePanel`的`...

    jquery异步调用页面后台方法

    对于每个按钮点击事件,我们使用 `$.ajax()` 发送一个 POST 请求到指定的 URL(这里是 "JqueryCSMethodForm.aspx" 后跟特定的方法名)。`dataType` 参数设置为 "json" 表示我们期望服务器返回 JSON 格式的响应数据,...

    页面加载中loading(js、asp.net)

    3. **WebMethod 和 JavaScript**:如果使用Web服务(WebMethod)异步处理请求,可以在客户端通过JavaScript调用这些方法,并在调用前后显示/隐藏loading。 通过以上方法,无论是JavaScript还是ASP.NET,都可以有效...

    aspx输入首字母文本框自动完成检索

    然后,可以在aspx页面上添加TextBox和AutoCompleteExtender控件: ```asp &lt;asp:ScriptManager ID="ScriptManager1" runat="server"&gt;&lt;/asp:ScriptManager&gt; &lt;asp:TextBox ID="txtSearch" runat="server"&gt;&lt;/asp:...

    网页层拖动实例(ASP.NET+AJAX)

    4. **WebMethod或PageMethod**:在ASP.NET中,可以创建WebMethod或PageMethod来处理来自客户端的AJAX请求。这些方法通常定义在ASP.NET的后台代码中,接收并处理拖动事件的数据,然后返回结果。 5. **异步通信**:...

    asp.net中AJAX与ashx页面交互简单示例

    在ASP.NET中,我们可以用它来处理特定的任务,如数据检索或处理,而不像`.aspx`页面那样需要完整的页面生命周期。 在AJAX交互中,前端JavaScript通常负责发起异步请求,而`.ashx`文件接收并处理这些请求。以下是...

    简单实现C# ajax demo

    接下来,我们需要在Default.aspx前端页面上实现Ajax调用。在HTML部分,添加一个按钮和一个用于显示结果的区域: ```html 获取数据 &lt;div id="result"&gt;&lt;/div&gt; ``` 然后,使用JavaScript和jQuery库来实现Ajax请求。...

    asp.net 利用jquery-ajax调用后台方法

    url: "Default.aspx/HelloWorld", contentType: "application/json; charset=utf-8", dataType: "json", success: function (response) { alert(response.d); }, error: function (xhr, status, error) { ...

    基于jquery.masonry插件开发的瀑布流ajax动态加载数据功能

    为了实现动态加载数据,我们需要在Aspx页面中编写逻辑,处理Ajax请求并返回新的数据。通常,这涉及到创建一个WebMethod或使用ASP.NET MVC的控制器方法来接收Ajax请求。 Ajax技术使得网页无需刷新即可获取新数据,...

    静态页中利用AJAX.NET实现无刷新页面

    当AJAX请求完成后,UpdatePanel会自动更新其内容,而无需整个页面重绘。 总的来说,利用AJAX.NET在静态页面中实现无刷新效果,不仅提升了用户体验,也降低了服务器负担。不过需要注意的是,虽然AJAX提供了更好的...

    asp.net下简单使用ajax

    这个方法可能在 ASPX 页面中定义,或者在代码-behind 类中定义为 `WebMethod`。例如: ```csharp [WebMethod] public static string GetData() { // 获取和处理数据 return "返回的数据"; } ``` 请求的 URL 将...

    Ajax无刷新验证以及改变验证码(asp.net)

    例如,我们可以创建一个名为`CheckCode.aspx.cs`的页面,包含以下C#代码: ```csharp [WebMethod] public static bool CheckCode(string inputCode) { // 假设验证码存储在Session中 string correctCode = ...

    自己写的ajax例子

    3. `newAjax.aspx.cs`: 这是C#后端代码,与`newAjax.aspx`页面关联,用于处理来自客户端的请求,包括Ajax请求。在这里,开发人员可能定义了处理Ajax请求的方法,如异步操作,数据处理,以及返回响应。 4. `areal....

Global site tag (gtag.js) - Google Analytics