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

来源:互联网 发布:阿里云实名认证多久好 编辑:程序博客网 时间:2024/04/30 03:39

总结背景:这个学期我们有数据库课设,我本来是比较擅长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的,不是很一样。


转载请注明出处,谢谢。




0 0
原创粉丝点击