如何使用EF将两个JSON值从视图发送到控制器

时间:2017-12-05 02:11:54

标签: json asp.net-mvc entity-framework view controller

这是我的剧本:

$.fn.serializeObject = function () {
    var o = {};
    var a = this.serializeArray();
    $.each(a, function () {
        if (o[this.name] !== undefined) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};



function btnadHocSave() {
    debugger
    var lv_header = $("#Header").serializeObject(); // this is header <fieldset> tag
    var lv_detail = $("#SubmitMachine").serializeObject(); // this is detail <fieldset> tag
    $.ajax({
        type: "POST",
        url: '@Url.Action("UpdateMachine")',
        contentType: "application/json",
        dataType: "JSON",
        data: {
            myheader: lv_header,
            mydetail: lv_detail
        },
        cache: false,
        success: function (data) {
            alert("Success!..");
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert(thrownError);
        }
    })
}

这是我的行动代码。 PMAllotmentEntryPMAllotmentDetailEntry是模型:

public ActionResult UpdateMachine(PMAllotmentEntry myheader, PMAllotmentDetailEntry mydetail)
{
    return View();
}

现在我的问题我无法从视图到控制器获取值。 我也试过JSON.stringify,但没有用。

如果我传递单个JSON值,它正在工作。

我尝试了所有可能性。如你所说也没有用。最后我做了以下几点。我有两个JSON值,但仍面临问题,因为JSON第二个值第一个字段值带有第一个JSON值。

       function btnadHocSave() {
            debugger

            var lv_header = $("#Header").serialize(); // this is header <fieldset>
            var lv_detail = $("#SubmitMachine").serialize();
            $.ajax(
                {
                    type: "GET",
                    url: '/PMAllotments/UpdateMachine',
                    contentType: "application/json",
                    dataType: "JSON",
                    data: lv_header + ',' + lv_detail,
                    success: function (data) {
                        alert("Success!..");
                        debugger
                        $("#adHocAdd40").modal("hide");
                    },
                    error: function (xhr, ajaxOptions, thrownError) {
                        alert(thrownError);
                    }
                })
        }

1 个答案:

答案 0 :(得分:0)

现在我从cshtml文件中删除了JQuery,只使用了post方法

[HttpPost]
public ActionResult UpdateMachine(PMAllotmentEntry m)
{
    //complete the task
    return View();
}

用for循环替换.cshtml文件中的foreach循环

FOR循环非常重要,foreach循环永远不会返回您的子模型数据。

@for (int a = 0; a < Model.PMAllotmentDetail.Count; a++)
{
     @* table rows here *@
}

我的模型如下

[NotMapped]
public class PMAllotmentEntry
{
    [Key]
    public Int64 PMAllotmentId { get; set; }

    [Required (ErrorMessage ="Add atleast one machine!")]
    public List<PMAllotmentDetailEntry> PMAllotmentDetail { get; set; }


}

[NotMapped]
public class PMAllotmentDetailEntry
{

    [Key]
    public Int64 PMAllotmentDetailId { get; set; }

    [ForeignKey("PMAllotmentId")]
    public Int64 PMAllotmentId { get; set; }

}