请教大家一个问问题,JQuery做Ajax的时候,服务器端
(1)有人用ashx处理,
(2)有人用aspx.cs中声明带有[WebMehtod]的public static 的方法,
第二种方法可以少一建立一个ashx文件(毕竟文件多了,也得管理),而且,Ajax的需要服务器端运行的时候,并没有运行页面的整个声明周期,因为本人在Page_Load中设置断点,页面第一次执行的时候,执行到,等Ajax调用静态方法时,Page_Load并没有执行到。
问题:那不知道第二种方法有何缺点?
ASHX!
多建一个文件算什么?ASHX就专门为这个而诞生的。
AJAX怎么能调用ASPX.CS里的静态方法的?这个似乎做不到吧?ASPX页面的请求,必定要构造一个对象实例,对象实例的运行一定会有Page_Load事件。
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: 有空方便再试,假如是真的。。。倒是我从来没想到过的。非常感谢。
从你的问题看,Page_Load是必须构造Page对象并且执行这个对象才会有触发事件的。静态函数的执行不存在构造对象的过程(只会触发静态构造函数的执行,也只是在第一次使用的时候)。
假如这个静态方法是可行的(我想应该是可行的,只是我掉到井里了),那么,类似于你直接在程序里通过类名调用这个静态方法。。。自然不会触发Page_Load事件了。
在写AJAX调用的时候,建议还是用ASHX吧。此外,在运行的时候,直接提供一个静态方法,非必要我认为是不可取的。
AJAX怎么能调用ASPX.CS里的静态方法的.但是需要为这个方法贴上一个标签。 [WebMethod]
頁面的那個方法 ,應該用 js ,PageMethods。GetUserName1()調用
//調用服務器的數據 ,新增加範圍
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);
}
);
}
@無限遐想: 你这里好像都是服务器控件呀,基本上不用服务器控件的
@hanshuhe: 是的。我這裡是用的服務器控件,你用客戶端的也可以。總之 是取到數值。給那個函數就好了哦。
ashx,我一直用这个做ajax
能给个reason吗?
ashx是一般处理程序,它和aspx一样都实现了IHttpHandler接口。
但是ashx的效率却比aspx高的多,它是asp.net中执行效率最高的处理程序。
一般简单的返回数据,或者生成验证码都用ashx。
我个人一般用ashx
用ashx还不如用asmx,用aspx静态方法也是有好处的,比如针对这个页面的各种ajax而非通用的