• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答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
    主站蜘蛛池模板: 久久久久亚洲精品无码网址| 最新精品露脸国产在线 | 国产亚洲精品AA片在线观看不加载| 在线亚洲精品福利网址导航| 欧美高清在线精品一区| 久久精品人人做人人爽97| 日本精品一区二区三区在线视频一 | 91精品国产91热久久久久福利| 久久久久久极精品久久久| 杨幂国产精品福利在线观看| 2021最新国产精品网站| 午夜精品射精入后重之免费观看 | 亚洲午夜久久久精品影院| 99精品国产丝袜在线拍国语 | 午夜国产精品无套| 久久夜色撩人精品国产小说| 国产中文在线亚洲精品官网| 91精品国产91久久久久久蜜臀| 影视网欧洲精品| 国产99精品一区二区三区免费| 一区二区三区国产精品| 久久久国产精品福利免费| 国产精品中文字幕在线观看| 成人国内精品久久久久影院| 992tv精品视频tv在线观看| 国产精品99久久99久久久| 国产成人精品999在线观看| 久久精品aⅴ无码中文字字幕重口| 午夜精品乱人伦小说区| 久久亚洲精品无码AV红樱桃| 久久精品亚洲中文字幕无码麻豆 | 精品久久久久久国产潘金莲| 精品黑人一区二区三区| 国内精品久久人妻互换| 国产精品女同一区二区| 国产成人精品免费久久久久| 99在线精品视频| 欧美精品亚洲精品日韩| 国产成人毛片亚洲精品| 精品久久久久久久中文字幕| 麻豆国内精品久久久久久|