广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >如何解决asp.net中mvc使用ajax提交参数的匹配问题
  • 937
分享到

如何解决asp.net中mvc使用ajax提交参数的匹配问题

2024-04-02 19:04:59 937人浏览 安东尼
摘要

本篇文章为大家展示了如何解决asp.net中mvc使用ajax提交参数的匹配问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 想到在

本篇文章为大家展示了如何解决asp.netmvc使用ajax提交参数的匹配问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

想到在asp.net的mvc中如果使用ajax向服务端传递参数时如果参数是一个类或者是个数组(或List集合)以及更复杂的对象时,服务端总是会发生取不到值的情况,当然网上也有很多解决的例子,但都是在服务端想办法来解决的(比如将JSON转换为字符串,再在服务端反序列化为一个对象),为何不能在客户端就把这个问题搞定。

其实问题没那么复杂,那是因为在Jquery提交Array的数据时,提交的时候始终会在名称后面加上”[]”, 问题就出在这里。另外在服务端对数组和内嵌的js对象进行解析时,需要像这样的格式,比如数组(或List集合)在服务端需要这样{'xxx[0]':'aaa','xxx[1]':'bbb'}的格式,而内嵌对象需要像这样{'xxx.a':'DDD','xxx.b':'hhh'},找到问题的原因就好解决了,如果我们能将json的格式转换为服务端了能够识别的格式,问题岂不迎刃而解。

说干就干,直接上代码

 代码如下:


//用于MVC参数适配javascript闭包函数

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",
"Ajax1": { "Name": "sq", "Age": 55, "Ajax3S": { "Ajax3Num": 234 } },
"Ajax2S": [{ "Note": "aaa", "Num": 12, "Ajax1S": [{ "Name": "sq1", "Age": 22, "Ajax3S": { "Ajax3Num": 456 } }, { "Name": "sq2", "Age": 33, "Ajax3S": { "Ajax3Num": 789 } }] },
{ "Note": "bbb", "Num": 34, "Ajax1S": [{ "Name": "sq3", "Age": 44, "Ajax3S": { "Ajax3Num": 654 } }, { "Name": "sq4", "Age": 987 }] }]
};


$.ajax({
url: "@Url.Action("AjaxTest")",

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 Ajax1 Ajax1 { set; get; }
public List<Ajax2> Ajax2S { set; get; }
}
public class Ajax1
{
public string Name { set; get; }
public int Age { set; get; }
public Ajax3 Ajax3S { set; get; }
}
public class Ajax2
{
public string Note { set; get; }
public int Num { set; get; }
public List<Ajax1> Ajax1S { set; get; }
}
public class Ajax3
{
public int Ajax3Num { 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对象有多少复杂都没关系,他会自动转换为服务端要求的格式,服务端再也不用操心了。

上述内容就是如何解决asp.net中mvc使用ajax提交参数的匹配问题,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网JavaScript频道。

--结束END--

本文标题: 如何解决asp.net中mvc使用ajax提交参数的匹配问题

本文链接: https://www.lsjlt.com/news/82802.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何解决asp.net中mvc使用ajax提交参数的匹配问题
    本篇文章为大家展示了如何解决asp.net中mvc使用ajax提交参数的匹配问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 想到在...
    99+
    2022-10-19
  • ajax如何解决参数过长无法提交成功的问题
    这篇文章主要介绍了ajax如何解决参数过长无法提交成功的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。查了很多资料都说,get方法的参数...
    99+
    2022-10-19
  • 怎么解决Ajax提交参数的值中带有html标签不能提交成功的问题
    这篇文章主要介绍“怎么解决Ajax提交参数的值中带有html标签不能提交成功的问题”,在日常操作中,相信很多人在怎么解决Ajax提交参数的值中带有html标签不能提交成功的问题问题上存在疑惑,小编查阅了各式...
    99+
    2022-10-19
  • 如何解决ajax中提交数据到后台jsp页面及页面跳转问题
    这篇文章主要为大家展示了“如何解决ajax中提交数据到后台jsp页面及页面跳转问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决ajax中提交数据到后台...
    99+
    2022-10-19
  • 如何使用HTML5中postMessage解决Ajax中POST跨域的问题
    这篇文章主要为大家展示了“如何使用HTML5中postMessage解决Ajax中POST跨域的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用HTM...
    99+
    2022-10-19
  • 如何解决ajax提交到后台数据成功但返回不走success而走的error问题
    这篇文章主要介绍了如何解决ajax提交到后台数据成功但返回不走success而走的error问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下...
    99+
    2022-10-19
  • 如何使用shift解决shell编程中的入参问题
    这篇文章主要介绍如何使用shift解决shell编程中的入参问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!shell编程经常会遇到参数个数不定的这种情况,这种情况怎么处理呢?shift就要闪亮登场了。 $#是入参...
    99+
    2023-06-09
  • 如何解决使用@PathVariable传递参数报错404的问题
    这篇文章给大家分享的是有关如何解决使用@PathVariable传递参数报错404的问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。目录@PathVariable传递参数报错404restFul风格传参, 参数...
    99+
    2023-06-25
  • 如何解决Mysql数据库中sql语句的where条件中文本匹配问题
    这篇文章主要介绍如何解决Mysql数据库中sql语句的where条件中文本匹配问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Mysql数据库中sql语句中wher...
    99+
    2022-10-18
  • 如何解决ASP.NET Core中使用漏桶算法限流的问题
    这篇文章主要介绍了如何解决ASP.NET Core中使用漏桶算法限流的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。漏桶算法是限流的四大主流算法之一,其应用场景...
    99+
    2023-06-25
  • 如何解决使用feign传递参数类型为MultipartFile的问题
    这篇文章主要介绍如何解决使用feign传递参数类型为MultipartFile的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!feign传递参数类型为MultipartFilefeign默认是不支持多媒体文件类型...
    99+
    2023-06-29
  • 使用controller接收js传过来的参数问题如何解决
    本文小编为大家详细介绍“使用controller接收js传过来的参数问题如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“使用controller接收js传过来的参数问题如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-07-05
  • 如何解决ajax回调函数中使用$(this)取不到对象的问题
    本篇内容主要讲解“如何解决ajax回调函数中使用$(this)取不到对象的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决ajax回调函数中使用$(t...
    99+
    2022-10-19
  • 如何解决在Ajax中使用get和post所遇到的问题
    这篇文章主要介绍如何解决在Ajax中使用get和post所遇到的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用get遇到的问题:1.问题一. 缓存:当每次访问的url相同,客...
    99+
    2022-10-19
  • 如何解决feign调用中文参数被encode编译的问题
    这篇文章主要介绍如何解决feign调用中文参数被encode编译的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Feign调用中文参数被encode编译原因在实现一个feign调用时使用了Post请求,并且拼接u...
    99+
    2023-06-29
  • PHP escapeshellarg函数使用的中文问题如何解决
    这篇“PHP escapeshellarg函数使用的中文问题如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP e...
    99+
    2023-07-05
  • 如何解决使用ajax传递json到前台中文出现问号乱码的问题
    这篇文章主要为大家展示了“如何解决使用ajax传递json到前台中文出现问号乱码的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决使用ajax传递js...
    99+
    2022-10-19
  • Python 面试中的数组问题:如何使用 NumPy 解决?
    在 Python 面试中,往往会遇到一些与数组相关的问题,例如如何求一个数组的平均值、中位数、最大值、最小值等等。这些问题在实际开发中也是经常遇到的,因此我们需要掌握一些数组操作的技巧。 在 Python 中,有一个非常强大的数组库,叫做...
    99+
    2023-08-30
    面试 数组 numy
  • vue中如何解决使用element组件时事件想要传递其他参数的问题
    小编给大家分享一下vue中如何解决使用element组件时事件想要传递其他参数的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧...
    99+
    2022-10-19
  • 如何在 Linux 中使用 PHP 函数来解决 LeetCode 中的问题?
    LeetCode 是一个面向程序员的在线编程网站,旨在帮助开发者提高算法和数据结构的能力。在这个平台上,开发者可以练习各种算法和数据结构问题,以提高自己的编程技能。而在解决这些问题的过程中,开发者可以使用各种编程语言,包括 PHP。 在本...
    99+
    2023-06-13
    函数 linux leetcode
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作