<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答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提交參數(shù)的匹配問題解決探討

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

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

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

        想到在asp.net的mvc中如果使用ajax向服務端傳遞參數(shù)時如果參數(shù)是一個類或者是個數(shù)組(或List集合)以及更復雜的對象時,服務端總是會發(fā)生取不到值的情況,當然網(wǎng)上也有很多解決的例子,但都是在服務端想辦法來解決的(比如將json轉換為字符串,再在服務端反序列化為一個對象),為何不能在客戶端就把這個問題搞定。

        其實問題沒那么復雜,那是因為在jquery提交Array的數(shù)據(jù)時,提交的時候始終會在名稱后面加上”[]”, 問題就出在這里。另外在服務端對數(shù)組和內嵌的js對象進行解析時,需要像這樣的格式,比如數(shù)組(或List集合)在服務端需要這樣{'xxx[0]':'aaa','xxx[1]':'bbb'}的格式,而內嵌對象需要像這樣{'xxx.a':'ddd','xxx.b':'hhh'},找到問題的原因就好解決了,如果我們能將json的格式轉換為服務端了能夠識別的格式,問題豈不迎刃而解。

        說干就干,直接上代碼
        代碼如下:


        //用于MVC參數(shù)適配JavaScript閉包函數(shù)
        /*
        使用方式如下:
        $.ajax({
        url: "@Url.Action("AjaxTest")",
        data: mvcParamMatch("", sendData),//在此轉換json格式,用于mvc參數(shù)提交
        dataType: "json",
        type: "post",
        success:function(result) {
        alert(result.Message);
        }
        });
        */
        var mvcParamMatch = (function () {
        var MvcParameterAdaptive = {};
        //驗證是否為數(shù)組
        MvcParameterAdaptive.isArray = Function.isArray || function (o) {
        return typeof o === "object" &&
        Object.prototype.toString.call(o) === "[object Array]";
        };
        //將數(shù)組轉換為對象
        MvcParameterAdaptive.convertArrayToObject = function (/*數(shù)組名*/arrName, /*待轉換的數(shù)組*/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("請指定數(shù)組名,對應Action中數(shù)組參數(shù)名稱!");
        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")",
        /*
        在此使用閉包函數(shù)轉換json對象,如果你的json對象自身就是個數(shù)組Array,
        那么需要指定一個名稱,這個名稱對應于Action中這個數(shù)組參數(shù)的名稱像這樣
                    data:mvcParamMatch(sendData,"Action中所對應的參數(shù)名稱")
        */
        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對象有多少復雜都沒關系,他會自動轉換為服務端要求的格式,服務端再也不用操心了。

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

        文檔

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

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

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲成色在线综合网站 | 久久久久国产精品免费网站| 亚洲精品无码专区2| 日日摸夜夜添夜夜免费视频| mm1313亚洲精品无码又大又粗| 麻豆亚洲AV成人无码久久精品| 韩国日本好看电影免费看| 亚洲一区二区观看播放| 大学生高清一级毛片免费| 亚洲av成人无码网站… | 亚洲日本中文字幕天堂网| 国产大片免费天天看| 亚洲香蕉网久久综合影视| 久久国产精品免费看| 亚洲酒色1314狠狠做| 最近中文字幕mv免费高清电影| 中文字幕无码精品亚洲资源网久久| 好男人视频社区精品免费| 国产综合激情在线亚洲第一页| 在线a亚洲v天堂网2018| 国产人成网在线播放VA免费| 亚洲AV日韩精品久久久久久久| 国产精品免费观看| 亚洲高清乱码午夜电影网| 亚洲国模精品一区| 免费看男人j放进女人j免费看| 亚洲大香伊人蕉在人依线| 青青青国产免费一夜七次郎| 香蕉视频在线观看免费| 亚洲人成网77777亚洲色| 久久久久久曰本AV免费免费| 亚洲精品国产suv一区88| 亚洲一级特黄大片无码毛片| 97青青草原国产免费观看| 亚洲一本到无码av中文字幕| 亚洲中文字幕丝袜制服一区| 51在线视频免费观看视频| 亚洲Av永久无码精品一区二区| 亚洲人成图片小说网站| 欧美日韩国产免费一区二区三区| 国产精品亚洲色图|