首页新闻找找看学习计划

使用ashx还是aspx的[WebMethod]

0
悬赏园豆:30 [已解决问题] 解决于 2012-06-10 09:36

请教大家一个问问题,JQuery做Ajax的时候,服务器端

(1)有人用ashx处理,

(2)有人用aspx.cs中声明带有[WebMehtod]的public static 的方法,

第二种方法可以少一建立一个ashx文件(毕竟文件多了,也得管理),而且,Ajax的需要服务器端运行的时候,并没有运行页面的整个声明周期,因为本人在Page_Load中设置断点,页面第一次执行的时候,执行到,等Ajax调用静态方法时,Page_Load并没有执行到。

问题:那不知道第二种方法有何缺点?

hanshuhe的主页 hanshuhe | 初学一级 | 园豆:6
提问于:2012-05-21 08:27
< >
分享
最佳答案
-2

ASHX!

多建一个文件算什么?ASHX就专门为这个而诞生的。

 

AJAX怎么能调用ASPX.CS里的静态方法的?这个似乎做不到吧?ASPX页面的请求,必定要构造一个对象实例,对象实例的运行一定会有Page_Load事件。

收获园豆:15
无之无 | 大侠五级 |园豆:5085 | 2012-05-21 08:45

CS文件

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

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write("Page_Load");
    }
    [WebMethod]
    public static string GetUserName()
    {
        return "Hello";
    }

    //如果要在这个方法里操作session,那 还得将WebMethod的EnableSession 属性设为true 。即:

    [WebMethod(EnableSession = true)]//或[WebMethod(true)]
    public static string GetUserName1(string name)
    {
        return "Hello:"+name;
    }

}

 aspx文件

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

<!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">
    <title></title>
      <script type="text/javascript" src="Scripts/jquery-1.4.1.js" charset="gb2132"></script>
      <script type="text/javascript">
       

          function Button1_onclick() {
              $.ajax({
                  type: "POST",
                  contentType: "application/json",
                  url: "Default2.aspx/GetUserName",
                  data: "{}",
                  dataType: "json",
                  success: function (result) {
                      alert(result.d);
                  }
              });
          }

          function Button2_onclick() {
              $.ajax({
                  type: "POST",
                  contentType: "application/json",
                  url: "Default2.aspx/GetUserName1",
                  data: "{name:'xioahe'}",
                  dataType: "json",
                  success: function (result) {
                      alert(result.d);
                  }
              });
          }

      </script>
</head>
<body>
    <form runat="server">
    <div>
        <input type="button" value="button1" onclick="return Button1_onclick()" /><input
            type="button" value="button2" onclick="return Button2_onclick()" />
    </div>
    </form>
</body>
</html>

 你试试,看看这个静态方法能不能做到

hanshuhe | 园豆:6 (初学一级) | 2012-05-21 08:56

@hanshuhe: 有空方便再试,假如是真的。。。倒是我从来没想到过的。非常感谢。

从你的问题看,Page_Load是必须构造Page对象并且执行这个对象才会有触发事件的。静态函数的执行不存在构造对象的过程(只会触发静态构造函数的执行,也只是在第一次使用的时候)。

假如这个静态方法是可行的(我想应该是可行的,只是我掉到井里了),那么,类似于你直接在程序里通过类名调用这个静态方法。。。自然不会触发Page_Load事件了。

在写AJAX调用的时候,建议还是用ASHX吧。此外,在运行的时候,直接提供一个静态方法,非必要我认为是不可取的。

无之无 | 园豆:5085 (大侠五级) | 2012-05-21 09:03

AJAX怎么能调用ASPX.CS里的静态方法的.但是需要为这个方法贴上一个标签。 [WebMethod]

叶小党 | 园豆:481 (菜鸟二级) | 2012-05-21 17:27
其他回答(6)
0

頁面的那個方法 ,應該用 js ,PageMethods。GetUserName1()調用

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-21 09:22

   //調用服務器的數據 ,新增加範圍
 function FindResult(result){
    PageMethods.txtRoadSearchChange(
            $("#ctl00_ContentPlaceHolder1_UCCSB091_ddlCity").val(),
            $("#ctl00_ContentPlaceHolder1_UCCSB091_ddlArea").val(),
            $("#ctl00_ContentPlaceHolder1_UCCSB091_txtRoadSearch").eq(0).val(),
            function(result){
                if(result!="")
                $("#ctl00_ContentPlaceHolder1_UCCSB091_ddlRoad").val(result);
                }
            );
 
 }

支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-21 09:23

@無限遐想: 你这里好像都是服务器控件呀,基本上不用服务器控件的

支持(0) 反对(0) hanshuhe | 园豆:6 (初学一级) | 2012-05-21 10:23

@hanshuhe: 是的。我這裡是用的服務器控件,你用客戶端的也可以。總之 是取到數值。給那個函數就好了哦。

支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-21 10:54
0

ashx,我一直用这个做ajax

xu_happy_you | 园豆:222 (菜鸟二级) | 2012-05-21 10:23

能给个reason吗?

支持(0) 反对(0) hanshuhe | 园豆:6 (初学一级) | 2012-05-21 10:35
0
dudu | 园豆:41258 (高人七级) | 2012-05-21 14:20
0

ashx是一般处理程序,它和aspx一样都实现了IHttpHandler接口。

但是ashx的效率却比aspx高的多,它是asp.net中执行效率最高的处理程序。

一般简单的返回数据,或者生成验证码都用ashx。

收获园豆:15
叶小党 | 园豆:481 (菜鸟二级) | 2012-05-21 17:30
0

我个人一般用ashx

Servers | 园豆:45 (初学一级) | 2012-05-22 15:35
0

用ashx还不如用asmx,用aspx静态方法也是有好处的,比如针对这个页面的各种ajax而非通用的

eflay | 园豆:189 (初学一级) | 2012-12-21 09:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册