簡體   English   中英

FormData中的對象數組將0個對象傳遞給控制器

[英]Object array in FormData passing 0 objects to controller

我正在對傳遞FormData()的控制器進行ajax調用,FormData()有一個對象數組以及很少的其他屬性。 在我的控制器中,我傳遞的列表數組似乎有0個元素。 請幫忙!

cshtml視圖中的腳本 -

    var _getFormDataToJson = function () {                            
            var applyDetail = [];
            $(_tb).find('tbody tr').each(function (i, v) {
                var trans = {
                    effectiveDate: $(this).find('.effectiveDate').val(),
                    amount: $(this).find('.amount').val(),
                    empLeaveHdID: $('#tx-leaveHdID').val(),
                    //attachmentUrl: $(this).find('.leaveAttachment')[0].files[0]
                }

                applyDetail.push(trans);
            });

            var formObj = new FormData();
            formObj.append('remark', $('#tx-remark').val());
            formObj.append('leaveAppType', $('#hdnLeaveAppType').val());
            formObj.append('applyDetail', applyDetail); //this collection has 0 items in controller

            return formObj;
        }

        var _sumbitForm = function () {
            var formData2 = _getFormDataToJson();               
                $.ajax({
                    url: '@Url.Action("ApplyLeave", "Leave")',
                    type: 'POST',
                    processData: false,
                    contentType: false,
                    data: formData2,
                    //data: { data: formData2 },
                    success: function (data) {
                        if (data.success) {
                            _myToastr.success(data.msg[0], true, function () {
                                location.reload();
                            });

                            $(_modal).modal('close');
                        }
                        else {
                            _myToastr.error(data.msg[0]);
                        }
                    },
                    complete: function () {

                    }
                });
            }            

控制器 -

 [HttpPost]
    public JsonResult ApplyLeave(Hr_LeaveApplyHd data)
    {
        foreach (var detail in data.applyDetail) //applyDetail count is 0 here
        {
            //to DO:
        }

        return new JsonResult();
    }

編輯:Hr_LeaveApplyHd模型 -

public class Hr_LeaveApplyHd
{
    public Hr_LeaveApplyHd()
    {
        applyDetail = new List<ApplyDetail>();
    }

    [Key]
    public int applyID { get; set; }
    public string remark { get; set; }
    public virtual List<ApplyDetail> applyDetail { get; set; }
    public LeaveAppType leaveAppType { get; set; }
}

applyDetail模型 -

public class ApplyDetail 
{
    [Key]
    public int applyDetialID { get; set; }

    public DateTime effectiveDate { get; set; }
    public decimal amount { get; set; }

    public int empLeaveHdID { get; set; }
}

您不能將數組和/或復雜對象附加到FormData 您需要為ApplyDetail每個屬性以及ApplyDetail中的每個項目以及索引器附加名稱/值對,例如

formObj .append('applyDetail[0].effectiveDate', '09/19/2017');

例如,您可以在$.each循環中執行此操作

var formObj = new FormData();
formObj.append('remark', $('#tx-remark').val());
formObj.append('leaveAppType', $('#hdnLeaveAppType').val());
$(_tb).find('tbody tr').each(function (i, v) {
    var name = 'applyDetail[' + i + '].effectiveDate';
    var value = $(this).find('.effectiveDate').val();
    formObj.append(name, value);
    ... // ditto for other properties
});

但是,如果您使用強類型HtmlHelper方法正確生成了表單,包括使用forApplyDetailEditorTemplatefor循環生成集合屬性的控件,那么它們具有與您的模型匹配的正確名稱屬性,那么您所需要的只是

var formObj = new FormData($('form').get(0));

這將正確序列化所有表單控件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM