JS提交对象数组到C#服务端的两个方法

方法一:利用ajax

1) 客户端js代码:

//获取对象数组
function GetQAS() {
    var stuAnswerList = [];
    var stuAnswer = { 'answerID': 1, 'answerType': 1, 'answerContent': 'one', 'answerSingle': 1, 'answerMultiple': '1,2', 'answerTOF': true };
    var stuAnswer1 = { 'answerID': 1, 'answerType': 1, 'answerContent': 'two', 'answerSingle': 1, 'answerMultiple': '1,2', 'answerTOF': true };
    stuAnswerList.push(stuAnswer);
    stuAnswerList.push(stuAnswer);
    return stuAnswerList;
}
//ajax提交数据
function SubmitStuAnswersAjax(stuAnswerArr) {
    $.ajax({
        url: "../../Paper/SubmitStuAnswers",
        type: "post",
        data: { stuAnswerArr: stuAnswerArr },
        async: false,
        cache: false,
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            if (XMLHttpRequest.status == 1001) {
                eval(XMLHttpRequest.ResponseText);
            } else {
                alert("GetPaper error");
            }
        },
        success: function (data) {
            alert(data);
        }
    });
}
//按钮点击方法
function SubmitStuAnswersBtn() {
    var stuAnswerArr = GetQAS();
    SubmitStuAnswersAjax(stuAnswerArr);
}

2) 服务端C#代码:

//stuAnswerEntity
public class stuAnswerEntity
        {
            public int answerID { set; get; }
            public int answerType { set; get; }
            public int answerSingle { set; get; }
            public string answerMultiple { set; get; }
            public bool answerTOF { set; get; }
            public string answerContent { set; get; }
        }
//stuAnswerArr 注意前后台变量名称一定要相同
public ActionResult SubmitStuAnswers(List<stuAnswerEntity> stuAnswerArr)
{
    bool re = false;
    List<stuAnswerEntity> stuAnswerEntityList = new List<stuAnswerEntity>();
    stuAnswerEntityList = stuAnswerArr;
    //此时stuAnswerArr中就存有前台stuAnswerArr中的数据;
    return Content(re.ToString());
}

方法二:js模拟form 进行post提交

1) 客户端js代码:

function REV_SubmitStuAnswersBtn() {
    var stuAnswerArr=JSON.stringify(GetQAS());//转成json字符串
    //JS模拟post提交
    var REVQForm = document.createElement("form");
    REVQForm.setAttribute("method", 'POST');
    REVQForm.setAttribute("action", '../Paper/GetREVPaper');
    REVQForm.innerHTML = "";
    var stuAnswerInput = document.createElement("input");
    stuAnswerInput.setAttribute("type", "hidden");
    stuAnswerInput.setAttribute("name", 'REVQ');//'REVQ'
    stuAnswerInput.setAttribute("value", stuAnswerArr);
    REVQForm.appendChild(stuAnswerInput);
    document.body.appendChild(REVQForm);
    REVQForm.submit();
}

   
2) 服务端C#代码:以json字符串的方式传输

public ActionResult GetREVPaper()
{
    bool re = false;
    string stuAnswerJson = Request["REVQ"] == null ? "" : Request["REVQ"];//'REVQ'
    //将json字符串反序列化
    List<stuAnswerEntity> studentAnswerList = JsonConvert.DeserializeObject<List<stuAnswerEntity>>(stuAnswerJson);
    return Content(re.ToString());
}

Jquery ajax传递对象(数组)到后台并解析的实现

项目中实现一个工作经历列表功能,动态添加,数据需要传递到后台。这里考虑到用户体验:该界面交互较多,多次添加和删除都是用js实现的。所以,最后传递数据到后台,我也是采用了jquery的ajax方法,读取js的缓存数据(array),传递到ashx中。

这里有个问题就是:jquery传递对象/数组,无法传递,并且服务端无法获取数据。

完整解决方案:

1、js对象创建:因为需要把对象json序列化后,才能传递到后台,后台根据json字符串进行反序列化。

所以要求,在js中创建一个对象,与后台C#的实体对象一致。

function WorkEx(depart, title, begintime, endtime) {
    this.SuId = 0;
    this.Id = 0;
    this.DepartmentName = depart;
    this.Title = title;
    this.BeginTime = begintime;
    this.EndTime = endtime;
    this.Description = "";
    this.Enable = 0;
    return this;
}

WorkEx对象,与C#对象完全一致。

2、Jquery   $.ajax方法的配置

针对$.ajax方法的配置参数需要进行修改:

1)dataType: "json", traditional:true:数据类型必须是json。默认的话,traditional为false,即jquery会深度序列化参数对象,以适应如PHP和Ruby on Rails框架,
但servelt api无法处理,我们可以通过设置traditional 为true阻止深度序列化

2)这个是重点!需要把js对象进行json序列化,不然无法传递到服务端。

data: {  Wl: JSON.stringify(WorkList) }

3)完整代码:

var AjaxUrl = "../../Service/sp.ashx";
$.ajax({ 
    type: "post",
    dataType: "json", traditional:true,
    data: { Wl: JSON.stringify(WorkList) },
    url: AjaxUrl,
    success: function (data, textStatus) {
        if (data != null) {
              
            if (data) {
                alert("添加成功,系统将会跳转到详情界面。");
                window.location.href = "SuspectList.html";
            }
            else { 
                $("#btnAdd").attr("disabled", false); $("#btnAdd").text("再次提交");
            }
        }
    },
    complete: function (XMLHttpRequest, textStatus) {
    },
    error: function (e) {
          
        $("#btnAdd").attr("disabled", false); $("#btnAdd").text("再次尝试提交");
    }
});

3、在服务器端进行反序列化:

1) 获取到post过来的数据: string worklist = CustomResponse.GetResponse("Wl");

2)反序列化:

List<SuspectWorkExperience> listwork = new List<SuspectWorkExperience>();
listwork = Newtonsoft.Json.JsonConvert.DeserializeObject<List<SuspectWorkExperience>>(worklist);

Newtonsoft.Json.JsonConvert是一个微软的免费json转换工具。

Newtonsoft.Json 是.NET 下开源的json格式序列号和反序列化的类库.
官方网站: http://json.codeplex.com/

使用方法比较简单

1.首先下载你需要的版本,然后在应用程序中引用Newtonsoft.Json.dll 文件.

2.引用命名空间

这样就可以直接转换成后台的实体了。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c#
, 数组
, 字符串
, 数据
, 对象
this
js提交对象数组、ajax提交对象数组、form表单提交对象数组、ajax提交json数组对象、jquery 提交对象数组,以便于您获取更多的相关知识。

时间: 2024-10-20 13:29:57

JS提交对象数组到C#服务端的两个方法的相关文章

httpwebrequest-C# winform程序用HttpWebRequest提交一个参数,需要服务端计算后返回结果

问题描述 C# winform程序用HttpWebRequest提交一个参数,需要服务端计算后返回结果 请求为 网址?param=XXX 我的服务器端改怎么写? 解决方案 HttpWebRequest有对应的HttpWebResponse,这个HttpWebResponse对象返回请求的页面的相应的所有信息字符串. 比如,你的请求url是"http://www.baidu.com/",那么HttpWebResponse对象返回的就应该是百度首页的html的所有字符.因此,如果你的请求页

详解Java向服务端发送文件的方法_java

本文实例为大家分享了Java向服务端发送文件的方法,供大家参考,具体内容如下 /* *给服务端发送文件,主要是IO流. */ import java.io.*; import java.net.*; class send2 { public static void main(String[] args) throws Exception { Socket s = new Socket("192.168.33.1",10005);//建立服务 BufferedReader bufr =

windows7系统无法开启DHCP Client服务的解决两种方法

  今天小编和大家分享windows7系统开启DHCP Client服务的两种方法,DHCP的作用在于集中的管理和分配IP地址,而且可以提升地址的使用率.使用路由器的用户必须开启DHCP Client服务,不然无法获取IP地址上网.最近有windows7系统无法开启DHCP Client服务,导致无法上网,怎么办?由于DHCP服务和"WinHTTP Web Proxy Auto-Discovery Service"服务存在依赖关系,一般无法开启的话是依存服务出错导致的.下面小编介绍两种

JS控制HTML元素的显示和隐藏的两种方法_javascript技巧

利用来JS控制页面控件显示和隐藏有两种方法,两种方法分别利用HTML的style中的两个属性,两种方法的不同之处在于控件隐藏后是否还在页面上占空位. 方法一: document.getElementById("EleId").style.visibility="hidden"; document.getElementById("EleId").style.visibility="visible"; 利用上述方法实现隐藏后,页面

JS实现n秒后自动跳转的两种方法_javascript技巧

本文实例为大家分享了JS实现n秒后自动跳转的两种方法,供大家参考,具体内容如下 第一种使用SetInterval: $(function () { setInterval(ChangeTime, 1000); }); function ChangeTime() { var time; time = $("#time").text(); time = parseInt(time); time--; if (time <= 0) { window.location.href = &q

js跨域访问示例(客户端/服务端)_javascript技巧

复制代码 代码如下: <div id="oid"></div> <script type="text/javascript"> //获取货号 $.ajax({ url: "http://192.168.1.191/H.ashx", type: "GET", dataType: 'jsonp', //jsonp的值自定义,如果使用jsoncallback,那么服务器端,要返回一个jsoncal

MongoDB服务端JavaScript脚本使用方法_MongoDB

常用JavaScript语句 复制代码 代码如下: db.getSiblingDB(<dbname>)   db.getCollectionNames()    db.getCollection(<collname>)    db.printCollectionStats() 在mongo shell运行JavaScript脚本   切换数据库:   复制代码 代码如下: use <dbname> 运行如下脚本: var total = 0; var dbaStatCo

android与asp.net服务端共享session的方法详解

前言 最近因为工作的需要,要实现一个功能,就是需要通过发送短信进行注册,现在想把短信验证码放到服务器的session值中,当客户端收到短信并提交短信码时由asp.net服务端进行判断,那么如何共享这个session那么需要在android客户端中添加几行代码. 实现方法 如下操作.第一次数据请求时就获取这个cookie的名称并且得到这个cookie的值,这个即是sessionid的值并保存在一个静态变量中,然后在第二次请求数据的时候要将这个sessionid一并放在Cookie中发给服务器,服务

js设置控件的隐藏与显示的两种方法_javascript技巧

用JavaScript隐藏控件的方法有两种,分别是通过设置控件的style的"display"和"visibility"属性. 当style.display="block"或style.visibility="visible"时控件或见,当style.display="none"或style.visibility="hidden"时控件不可见.不同的是"display"