소개:
Ajax 메서드를 사용하여 Asp.net mvc 프레임워크에서 Action 메서드에 복잡한 Json 개체를 제출하면 몇 가지 문제가 발생합니다. 여기서는 ASP에서 이 문제를 해결하기 위해 Javascript를 사용합니다. .net mvc 3.0 이후에는 JsonValueProviderFactory를 사용하여 이 문제를 해결할 수 있지만 여기서는 순수 js를 사용하여 이 문제에 대한 솔루션을 제공합니다. 이 방법은 mvc 2.0의 이전 시스템에서도 사용할 수 있습니다.
다음 개체 구조와 같은 복잡한 개체를 제출해야 합니다.
1 {
2 hotelName:'abc',
3 hotelAddress: 'Beijing Haidian Road No. 72',
객실 4개:[ {roomName:'Standard Room',roomPrice:720},
5 {roomName:Deluxe Room,roomPrice:1020}] ,
6 HotelStar:4
7 }
8 // 이때 배경 Action 객체에 올바르게 제출하려면 다음 형식으로 변환해야 합니다.
9
10
11 {
12 호텔 이름:'abc',
13 호텔 주소:' No. 72, Haidian Road, Beijing ',
객실 14개[0]: {roomName:'Standard Room',roomPrice:720},
객실 15개[1]: {roomName:Deluxe Room,roomPrice: 1020},
16 HotelStar:4
17 }
18 //형식 변환 코드:
19
20 var 변환 ={
21 _jsonFlat:function (data, parentPro, returnObj) {
22 if (data instanceof Object) {
23 for (varpro in data) {
>24 ~ 29개종. _jsonFlat(proValue[i], parentPro + "." + pro + "["+ i + "]", returnObj) 30 } 31 Convert._jsonFlat(proValue[i ], pro + "[ " + i + "]",returnObj); 33 37 if(parentPro) 38 Convert._jsonFlat(proValue, parentPro + "."+ pro, returnObj); 39 else 40 Convert._jsonFlat(proValue, pro, returnObj) 4144 if(parentPro)
45 returnObj[parentPro + "." + pro] = 프로값;
46 else
47 returnObj[pro] =proValue;
48
49 }
50 catch(e) { };
51 }
52 반품;
53 }
54 //그렇지 않으면 문자열/int/날짜/시간 형식과 유사
55 returnObj[parentPro] = data;
56 },jsonFlat: function(data) {
57 //디버거;
58 if(data && data instanceof Object) {
59 varretObj = {};
60 Convert._jsonFlat(data, null, retObj);
61 returnretObj;
62 }
63 null 반환;
64 },
65 }
解释:以上代码就是完成Json对象格式的转换,只有通过转换厎的复材J son对象才能提交到后台的액션 방법上 上 上 jsonfloat 方法 方法 运用 递归 遍历 遍历 遍历 json 对象 对象 上 的 所有 所有 属性 进行 进行 扁平化 转换。。
调用 调用 例子
viewprint?1 $ .ajax ({
2 url: "controller/action",3 data:Convert.jsonFlat({/*your json data*/}),4 성공: function(){5 $(this).addClass("done");6 }7 });지금 3.0以后Mvc已经内置注册册JsonValueProviderFactory, 然后就可以直接这样调사용 ajax 방식법이 없습니다.成application/json.원본 보기$.ajax({ url: "controller/action", data:{/*your json data*/}, contentType: "application/json", 성공: function(){ $(this).addClass("done"); }} );