ASP.net 中用JQuery+AJAX+JSON 实现无刷新传参

总结背景:这个学期我们有数据库课设,我本来是比较擅长JSP的,结果老师指明不让用JAVA,我虽然对C#窗体编程较为熟练可是实在是不想再去学ASP,因为我肯定不会深入学下去,学什么MVC模型……(我jsp都学过了,还研究了不少)。

为了不学习ASP(虽然我懂 拖控件与 标签上加个 runat=“server”,可以直接操纵HTML元素,十分简单,可我就是不想接触ASP的知识),我从很早就策划绕过ASP的学习。凭我的经验我想到AJAX传参了,传数据当然还是JSON方便,于是蓄谋已久的计划终于在课设的时候用到了。 由于其中用到了大量的js,jQuery知识,我还不太懂,所以做起来十分吃力。班里就是从没接触过C#凭借着拖控件也比我做的快。最后过了五天2:30睡7:00起的生活,终于在最后一天做完。

昨天我又做了JAVA的JSON传参,发现很不一样(真的是不一样),所以打算记下来。

介绍开始:

前台部分:(先贴代码)

function modifyStuAjax(para){
	var mg=null;//将要传回去的 js 对象(Object)的结果
	para = JSON.stringify(para); //将传来的参数(js 对象)解析成JSON对象
	$.ajax({    //jQuery的AJAX传参
		
		type: "POST",   //post方法
		url: "../../aspx/student.aspx/modifyStu", //访问请求处理的函数
		data: para,   //要传的参数
		contentType: "application/json;charset=utf-8",// 应该是请求的头格式,指明传向后台的是JSON格式的数据
		dataType: "json", //后台返回JSON格式的字符串
		async:false,   //不写也行,写上是为了同步,而不是异步执行
		success: function (msg) {
		    mg = JSON.parse(msg.d);  //成功后msg得到后台传来的JSON格式的字符串,解析成js 对象
			
		},
		error: function (xmlReq, err, c) {
			  ShowDIV("request fail,可能您未登录"); //失败后处理,alert也行
		}
	});
	return mg;
}
我所写的并不是一定都要,但是我之前试过,如果去掉其中某一个部分,都无法正常运行。  值得注意的是msg.d,这个d是被自动加上去的,chrome的network可以看到形如{“d":{ 这里是你真正处理后返回的JSON对象  }}的数据,做过JAVA后我发现可能是ASP自己给加的,有待考证,希望有人指点。

必须有的:JSON.stringify,JSON.parse,contentType: "application/json;charset=utf-8",dataType: "json",(当然不用JSON可写成text等),data也必须是JSON类型的,如果不传参的话,也要写个“{‘a':'a'}”这样的JSON格式参数。

其中URL里面倒数第一个’/‘后面的是要访问的方法(在aspx.cs中可以访问需要参数的,也一样这样写),它前面的是cs对应的ASPX页面。

顺便说一下 他们关联靠的是 ASPX最上面的<%@ Page Language="C#" AutoEventWireup="true" CodeFile="searchstudent.aspx.cs" Inherits="page_student_searchstudent" %>  

前台调用:

var para={
		stu:{
			sno:modifysno,
			sname:sname,
			ssex:ssex,
			sphone:sphone,
			snation:snation,
			smid:smid,
			sclass:sclass
		}
	};
	//alert(21);
	var msg=modifyStuAjax( para );

para要写成js对象的形式。这样你会问,后台该怎么得到这些参数呢?这个后面讲。还有得到数据的处理,也就不说了,那是js的知识。

前台结束。


后台部分:

个人认为C#的 Newtonsoft.Json 处理JSON数据比较方便(还有一个.net 3.0以上自带的 解析器,可以直接解析对象,我说的这个处理器数组,list与对象不很方便,但是我会用),所以首先下载 Newtonsoft.Json的dll然后引入项目中。

我先把前后台传参的事说一下。

后台给前台传参就是返回一个string,只不过是json格式的。前台给后台传参,也就是给访问后台的静态函数传参数。后台定义这个参数的名字,必须和前台传来的JSON,数据对应上,这个实在讲不清楚,反正记住 这时ASP自己映射的,名字取得一样才可以映射过去。 比如我上面的 参数 后台的  代码形如

[WebMethod]

public static string modifyStu(strudent stu){}

student 是我自己定义的class,里面有字段 sno,sname,ssex……现在总该知道怎么自动传参了吧。  还有如果传两个参数 前台就要类似

{ pa1:{},pa2:{} } 

后面的就是我自己总结给自己看的Newtonsoft.Json使用就不说明了。

[WebMethod]
    public static string gainDormShowInfo(){
        dormDao dormdao = new dormDao();
        List<bd_showinfo> bdinfos =dormdao.gainDormShowInfo();

        StringWriter sw = new StringWriter();
        JsonWriter writer = new JsonTextWriter(sw);

        writer.WriteStartObject();
        writer.WritePropertyName("rt");
        if (bdinfos == null)
        {
            writer.WriteValue("false");
        }
        else
        {
            writer.WriteStartArray();

            building bd;
            foreach (bd_showinfo binf in bdinfos)
            {
                bd = binf.Bd;
                writer.WriteStartObject();

                writer.WritePropertyName("bd");
                writer.WriteStartObject();

                    writer.WritePropertyName("bno");
                    writer.WriteValue(bd.Bno);
                    writer.WritePropertyName("bhomenum");
                    writer.WriteValue(bd.Bhomenum);
                    writer.WritePropertyName("bfloornum");
                    writer.WriteValue(bd.Bfloornum);
                    writer.WritePropertyName("bbegintime");
                    writer.WriteValue(bd.Bbegintime);

                writer.WriteEndObject();


                writer.WritePropertyName("gnums");
                writer.WriteValue(binf.Gnums);
                writer.WritePropertyName("bnums");
                writer.WriteValue(binf.Bnums);
                writer.WritePropertyName("gdorms");
                writer.WriteValue(binf.Gdorms);
                writer.WritePropertyName("bdorms");
                writer.WriteValue(binf.Bdorms);

                writer.WriteEndObject();
                
            }


            writer.WriteEndArray();
        }
        writer.WriteEndObject();
        writer.Flush();

        string jsonText = sw.GetStringBuilder().ToString();
        return jsonText;
    }

上面产生的JSON 包括的数组,对象里面嵌套对象,我研究了好一会而才写出的。


这是ASP的后面我要总结JSP的,不是很一样。


转载请注明出处,谢谢。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值