首页 > 解决方案 > 视图中的 Asp.net Master-Detail 对象与 actionresult 中的视图模型不完全匹配

问题描述

我正在尝试使用 Ajax 将对象从 mvc 视图传递给操作结果。但是接收动作结果的对象不包含主对象中的细节对象。这是发布到操作结果的视图中的 javascript 代码:

浏览 Javascript

        $('#save').click(function () {

            var Details = {
                "Id": "",
                "IdGsm": "",
                "IdCarrier": "",
                "PortName": "",
                "Status": "",
                "CarrierName": ""
            }
            var Carrier = {
                "Id": "",
                "CarrierName": "",
                "MobileNetworkCode": "",
                "MobileCountryCode": "",
                "CountryCode": "",
                "InNetworkCost": "",
                "OutNetworkCost":""
            }
            var Encoding = {
                "Id": "",
                "Description":""
            }

            var GsmViewModel = {
                "Id": "0",
                "Nombre": "0",
                "Ip": "0",
                "Puerto": "",
                "Usuario": "",
                "Password": "",
                "IdEncoding": "",
                "Estado": "",
                "Modelo": "",
                "Details": [],
                "Carrier": [],
                "Encoding": []
            }

            GsmViewModel.Encoding.push(Encoding);
            GsmViewModel.Carrier.push(Carrier);

            GsmViewModel.Id = 0;
            GsmViewModel.Nombre = $('#nombre').val();
            GsmViewModel.Ip = $('#ip').val();
            GsmViewModel.Puerto = $('#puerto').val();
            GsmViewModel.Usuario = $('#usuario').val();
            GsmViewModel.Password = $('#password').val();
            GsmViewModel.IdEncoding = $('#encoding option:selected').val();
            GsmViewModel.Estado = 1;
            GsmViewModel.Modelo = $('#modelo').val();

            var oTable = $('#dt').dataTable().fnGetData();
            for (var i = 0; i < oTable.length; i++) {


                if ($('h2').text() == "Nuevo GSM Gateway") {
                    Details.Id = $('#Id').val();
                }
                else {
                    Details.Id = 0;
                }
                Details.Id = oTable[i][0];
                Details.IdGsm = oTable[i][1];
                Details.IdCarrier = oTable[i][2];
                Details.CarrierName = oTable[i][3];
                Details.PortName = oTable[i][4];
                Details.Status = oTable[i][5];

                GsmViewModel.Details.push(Details);



            }

            });
            tbl.rows().every(function () {
                var data = this.data();

                Details.Id = 0;
                Details.IdGsm = 0;
                Details.IdCarrier = data[2];
                Details.CarrierName = data[3];
                Details.PortName = data[4];
                Details.Status = data[5];

                GsmViewModel.Details.push(Details);
            });

           //Ajax call to the controller, here the GsmViewModel is correctly fulfilled.

            $.ajax({
                url: '/Gsm/SaveGsm',
                data: JSON.stringify(GsmViewModel),
                type: 'POST',
                contentType: 'application/json;',
                dataType: 'json',
                success: function (result) {

                    if (result.Success == "1") {
                        //do some things
                    }
                    else {
                        alert(result.ex);
                    }
                }
            });

        });

这是动作结果和模型中的代码,在调试动作结果时,我可以看到主对象中的属性已正确分配,但详细列表为空,即使在视图中我可以看到对象是正确履行。一些细节在中间如何丢失。我最好的猜测是对象不匹配,但我一直在检查模型和对象的结构并且它们匹配。

行动结果

  [HttpPost]
    public ActionResult  SaveGsm(GsmViewModel  gsmConfig)
    {

        //do some stuff with the model, the problem here is that the model doesn't contain the details
        return RedirectToAction("ListaGsm", "Gsm");
    }

查看模型

public class GsmViewModel
{

    public int Id { get; set; }

    public string Nombre { get; set; }

    [Required]
    [Display(Name = "Dirección IP")]
    public string Ip { get; set; }

    [Required]
    [Display(Name = "Puerto")]
    public string Puerto { get; set; }

    [Required]
    [Display(Name = "Usuario")]
    public string Usuario { get; set; }

    [Required]
    [Display(Name = "Contraseña")]
    public string Password { get; set; }

    [Required]
    [Display(Name = "Encoding")]
    public Nullable<int> IdEncoding { get; set; }



    public Nullable<bool> Estado { get; set; }

    public string Modelo { get; set; }

    public List<GsmDetail> Details { get; set; }
    public List<Carrier> Carrier { get; set; }
    public IEnumerable<Encoding> Encoding { get; set; }
}

提前谢谢你,对不起我的英语和我的代码,我是 javascript 的新手....

标签: javascriptc#asp.netajaxrazor

解决方案


推荐阅读