国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

asp.net中mvc使用ajax提交參數的匹配問題解決探討

來源:懂視網 責編:小采 時間:2020-11-27 22:52:20
文檔

asp.net中mvc使用ajax提交參數的匹配問題解決探討

asp.net中mvc使用ajax提交參數的匹配問題解決探討:想到在asp.net的mvc中如果使用ajax向服務端傳遞參數時如果參數是一個類或者是個數組(或List集合)以及更復雜的對象時,服務端總是會發生取不到值的情況,當然網上也有很多解決的例子,但都是在服務端想辦法來解決的(比如將json轉換為字符串,再在服務端反序
推薦度:
導讀asp.net中mvc使用ajax提交參數的匹配問題解決探討:想到在asp.net的mvc中如果使用ajax向服務端傳遞參數時如果參數是一個類或者是個數組(或List集合)以及更復雜的對象時,服務端總是會發生取不到值的情況,當然網上也有很多解決的例子,但都是在服務端想辦法來解決的(比如將json轉換為字符串,再在服務端反序

想到在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閉包函數
/*
使用方式如下:
$.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",
"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")",
/*
在此使用閉包函數轉換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 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對象有多少復雜都沒關系,他會自動轉換為服務端要求的格式,服務端再也不用操心了。

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

asp.net中mvc使用ajax提交參數的匹配問題解決探討

asp.net中mvc使用ajax提交參數的匹配問題解決探討:想到在asp.net的mvc中如果使用ajax向服務端傳遞參數時如果參數是一個類或者是個數組(或List集合)以及更復雜的對象時,服務端總是會發生取不到值的情況,當然網上也有很多解決的例子,但都是在服務端想辦法來解決的(比如將json轉換為字符串,再在服務端反序
推薦度:
標簽: 使用 aj 解決
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产一区二区三区日韩欧美 | 伊人精品视频 | 精品一区二区在线观看 | 国内精品久久久久久中文字幕 | 老子影院午夜久久亚洲 | 国内精品伊人久久久久妇 | 婷婷成人亚洲 | 亚洲三级电影在线 | 精品国产一区二区三区在线 | 国产第7页 | 亚洲第一视频区 | 久久精品成人国产午夜 | 一级欧美日韩 | 亚洲精品国产精品精 | 国产亚洲欧美一区 | 日本韩国一区二区 | 精品视频在线观看视频免费视频 | 日韩精品网站 | 久久精品韩国日本国产 | 亚洲视频在线一区 | 国产人成精品综合欧美成人 | xx欧美 | 欧美日韩有码 | 国产一区二区三区免费 | 一区二区三区在线视频观看 | 精品欧美一区二区三区精品久久 | 亚洲天码中文字幕第一页 | 东京热毛片 | 视频在线观看一区 | 久久久久亚洲精品成人网小说 | 日韩经典第一页 | 在线免费观看国产视频 | 一级毛片免费观看 | 亚洲三级网站 | 高清精品一区二区三区一区 | 亚洲一区日韩一区欧美一区a | 久久久一区二区三区 | 欧美精品久久久久久久久大尺度 | 国产成人久久久精品毛片 | 精品久久久久久综合网 | 妖精视频一区二区三区 |