知识大全 asp.net中mvc使用ajax提交参数的匹配问题解决探讨

Posted

篇首语:大直若屈,大巧若拙,大辩若讷。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 asp.net中mvc使用ajax提交参数的匹配问题解决探讨相关的知识,希望对你有一定的参考价值。

本文为大家介绍下使用javaScript解决asp net中mvc使用ajax提交参数的匹配问题 遇到类似情况的朋友可以参考下 希望对大家有所帮助   想到在asp net的mvc中如果使用ajax向服务端传递参数时如果参数是一个类或者是个数组(或List集合)以及更复杂的对象时 服务端总是会发 生取不到值的情况 当然网上也有很多解决的例子 但都是在服务端想办法来解决的(比如将json转换为字符串 再在服务端反序列化为一个对象) 为何不能 在客户端就把这个问题搞定 其实问题没那么复杂 那是因为在jquery提交Array的数据时 提交的时候始终会在名称后面加上” []” 问题就出在这里 另外在服务端对数组和内嵌的js对象进行解析时 需要像这样的格式 比如数组(或List集合)在服务端需要这样 xxx[ ] : aaa xxx[ ] : bbb 的格式 而内嵌对象需要像这样 xxx a : ddd xxx b : hhh 找到问题的原因就好解决了 如果我们能将json的格式转换为服务端了能够识别的格式 问 题岂不迎刃而解 说干就干 直接上代码 复制代码 代码如下: //用于MVC参数适配JavaScript闭包函数 /* 使用方式如下 $ ajax( url: "@Url Action("AjaxTest")" data: mvcParamMatch("" sendData) //在此转换json格式 用于mvc参数提交 dataType: "json" type: "post" success:function(result) alert(result Message); ); */ var mvcParamMatch = (function () var MvcParameterAdaptive = ; //验证是否为数组 MvcParameterAdaptive isArray = Function isArray || function (o) return typeof o === "object" && Object prototype toString call(o) === "[object Array]"; ; //将数组转换为对象 MvcParameterAdaptive convertArrayToObject = function (/*数组名*/arrName /*待转换的数组*/array /*转换后存放的对象 不用输入*/saveOjb) var obj = saveOjb || ; function func(name arr) for (var i in arr) if (!MvcParameterAdaptive isArray(arr[i]) && typeof arr[i] === "object") for (var j in arr[i]) if (MvcParameterAdaptive isArray(arr[i][j])) func(name + "[" + i + "] " + j arr[i][j]); else if (typeof arr[i][j] === "object") MvcParameterAdaptive convertObject(name + "[" + i + "] " + j + " " arr[i][j] obj); else obj[name + "[" + i + "] " + j] = arr[i][j]; else obj[name + "[" + i + "]"] = arr[i]; func(arrName array); return obj; ; //转换对象 MvcParameterAdaptive convertObject = function (/*对象名*/objName /*待转换的对象*/turnObj /*转换后存放的对象 不用输入*/saveOjb) var obj = saveOjb || ; function func(name tobj) for (var i in tobj) if (MvcParameterAdaptive isArray(tobj[i])) MvcParameterAdaptive convertArrayToObject(i tobj[i] obj); else if (typeof tobj[i] === "object") func(name + i + " " tobj[i]); else obj[name + i] = tobj[i]; func(objName turnObj); return obj; ; return function (json arrName) arrName = arrName || ""; if (typeof json !== "object") throw new Error("请传入json对象"); if (MvcParameterAdaptive isArray(json) && !arrName) throw new Error("请指定数组名 对应Action中数组参数名称!"); if (MvcParameterAdaptive isArray(json)) return MvcParameterAdaptive convertArrayToObject(arrName json); return MvcParameterAdaptive convertObject("" json); ; )(); 使用方法非常简单 看下面的例子 首先是客户端的代码 复制代码 代码如下: var sendData = "Comment": "qqq" "Ajax ": "Name": "sq" "Age": "Ajax S": "Ajax Num": "Ajax S": [ "Note": "aaa" "Num": "Ajax S": [ "Name": "sq " "Age": "Ajax S": "Ajax Num": "Name": "sq " "Age": "Ajax S": "Ajax Num": ] "Note": "bbb" "Num": "Ajax S": [ "Name": "sq " "Age": "Ajax S": "Ajax Num": "Name": "sq " "Age": ] ] ; $ ajax( url: "@Url Action("AjaxTest")" /* 在此使用闭包函数转换json对象 如果你的json对象自身就是个数组Array 那么需要指定一个名称 这个名称对应于Action中这个数组参数的名称像这样 data:mvcParamMatch(sendData "Action中所对应的参数名称") */ data: mvcParamMatch(sendData) dataType: "json" type: "post" success:function(result) alert(result Message); error:function(a b c) ); 然后是服务端对应客户端json的实体类 复制代码 代码如下: public class AjaxParamModels public string Comment set; get; public Ajax Ajax set; get; public List<Ajax > Ajax S set; get; public class Ajax public string Name set; get; public int Age set; get; public Ajax Ajax S set; get; public class Ajax public string Note set; get; public int Num set; get; public List<Ajax > Ajax S set; get; public class Ajax public int Ajax Num set; get; 然后是controller中的action代码 复制代码 代码如下: public class TestController : Controller // // GET: /Test/ public ActionResult Index() return View(); public ActionResult AjaxTest(Models AjaxParamModels model) //在此可访问model return Json(new Message = "qqqqq"); 这样就OK了 不管你这个json对象有多少复杂都没关系 他会自动转换为服务端要求的格式 服务端再也不用操心了   cha138/Article/program/net/201311/14186

相关参考

知识大全 ASP.net中用axWebBrowser中提交表单

ASP.net中用axWebBrowser中提交表单  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 ASP.NET中防止页面多次提交的代码实现

ASP.NET中防止页面多次提交的代码实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  此处提

知识大全 asp.net表单提交方法GETPOST

asp.net表单提交方法GETPOST  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  表单fo

知识大全 防止ASP.NET按钮多次提交的办法

防止ASP.NET按钮多次提交的办法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  网上查了很多

知识大全 ASP.NET 2.0 中实现跨页提交

ASP.NET2.0中实现跨页提交  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在ASPNETx的

知识大全 ASP.NET 2.0 中跨网页提交的三种方法

ASP.NET2.0中跨网页提交的三种方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  当在一

知识大全 ASP.NET 2.0 中跨网页提交的三种方法[2]

ASP.NET2.0中跨网页提交的三种方法[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 ASP.NET 2.0 中跨网页提交的三种方法[1]

ASP.NET2.0中跨网页提交的三种方法[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 ASP.NET 2.0 中跨网页提交的三种方法[3]

ASP.NET2.0中跨网页提交的三种方法[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 应用程序Silverlight获取ASP.NET页面参数

应用程序Silverlight获取ASP.NET页面参数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下