【问题标题】:Passing Form Serialize and list to controller is not working?将表单序列化和列表传递给控制器​​不起作用?
【发布时间】:2020-04-27 08:29:05
【问题描述】:

我有这样的控制器:

 public ActionResult SaveWorkOrder(DTO_WorkOrder objWork, List<DTO_PartsWO> listTry)
 {
    //something
 }

和型号:

 public class DTO_WorkOrder
 {
    public string Id { get; set; }
    public string WoNo { get; set; }
    public string ReqNo { get; set; }
    public string ReqSparepartDate { get; set; }
    public List<DTO_PartsWO> PartsList { get; set; }
 }

这是我将数据传递给控制器​​的 javascript:

 function SaveWorkOrder() 
 {
    debugger;
    var dd = $('#tbParts').DataTable().rows().data().toArray();
    var vDataDet = new Array();

    //Loop through the Table rows and build a JSON array.
    $.each(dd, function (i, value) {
         debugger;
         var dataDetail = {};
         dataDetail.Line = i;
         dataDetail.PartCode = value[1];
         dataDetail.PartDesc = value[2];

         vDataDet.push(dataDetail);
         debugger;
    });

    var tmp = $('#WorkOrderForm').serialize();

    $.ajax({
       type: 'POST',
       url: '/Transactions/WorkOrder/SaveWorkOrder',
       data:  JSON.stringify({ objWork: tmp, listTry: vDataDet}),
       success: function (mdl)
       {
          debugger;
       },
       error: function (mdl)
       {
          debugger;
       }
    )}
 }

代码通过序列化表单但不是列表,我的列表为空... 请帮忙,已经编写了 3 天的代码以通过列表和序列化表单但没有工作

【问题讨论】:

  • 请注意,默认的contentType 不是Json,.serialize() 使用默认的 contentType 生成类似于queryString 的数据。
  • 感谢@Sajid 先生的回答,如果这是问题所在,该如何解决?因为我需要通过两者。正如您在我的模型中看到的那样,我将 DTO_PartWO 列表放入并尝试使用此代码 data: $('#WorkOrderForm').serialize() + "&amp;PartList="+VDataDet 填充该列表,但列表仍然为空
  • 我不认为你可以将两个复杂对象传递给你的控制器,限制是 1 个复杂对象,你需要把它们都放在一个 dto 中。
  • @sayahimad 有样品吗?考虑到列表超过 1 行,它真的有效吗?我尝试通过多种方式推送或附加 DTO_PartWO 中的列表,但都没有成功
  • 感谢大家的帮助

标签: javascript c# jquery ajax model-view-controller


【解决方案1】:

我不知道这是否正确,但它工作正常,而不是使用序列化,serializeArray 工作良好,所以我可以在表单中添加列表参数,所以这是我使用的代码:

function SaveWorkOrder() 
{
    debugger;
    var dd = $('#tbParts').DataTable().rows().data().toArray();
    var vDataDet = new Array();

    // step 1 serialize array the form
    var data = $("#WorkOrderForm").serializeArray();

    //Loop through the Table rows and build a JSON array.
    $.each(dd, function (i, value) {
       debugger;

       data[data.length] = { name: "PartsList[" + i + "].Line", value: i };    
       data[data.length] = { name: "PartsList[" + i + "].PartCode", value: value[1] };  
       data[data.length] = { name: "PartsList[" + i + "].PartName", value: value[2] };  
       debugger;
    });

    $.ajax({
        type: 'POST',
        url: '/Transactions/WorkOrder/SaveWorkOrder',
        data: data,
        success: function (mdl)
        {
           debugger;
        },
        error: function (mdl)
        {
           debugger;
        }
     })
}

这是控制器:

 public ActionResult SaveWorkOrder(DTO_WorkOrder objWork)
 {
    //something
 }

这是模型:

 public class DTO_WorkOrder
 {
    public string Id { get; set; }
    public string WoNo { get; set; }
    public string ReqNo { get; set; }
    public string ReqSparepartDate { get; set; }
    public List<DTO_PartsWO> PartsList { get; set; }
 }

 public class DTO_PartsWO
 {
    public string WoNo { get; set; }
    public Int32 Line { get; set; }
    public string PartCode { get; set; }
    public string PartName { get; set; }
 }

你可以在图片List in Objectdetail List看到结果。

【讨论】:

    猜你喜欢
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    相关资源
    最近更新 更多