【问题标题】:How to send two JSON values from view to controller using EF如何使用 EF 将两个 JSON 值从视图发送到控制器
【发布时间】:2018-05-18 14:32:03
【问题描述】:

这是我的脚本:

$.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);
                    }
                })
        }

【问题讨论】:

  • 首先,您需要使用data: JSON.stringify({ myheader: lv_header, mydetail: lv_detail}),,但为什么要使用serializeObject() 功能(一旦您拥有bool 属性,该功能就会失败)以及您发送数据的事实这样表明您没有正确生成视图
  • 最好的方法是创建一个新类并将这些“PMAllotmentEntry myheader, PMAllotmentDetailEntry mydetail”类放入一个类中。
  • 关于您的编辑 - 删除 contentType 选项及其 data: lv_header + '&amp;' + lv_detail, (但假设您的视图生成正确 - 但您没有显示任何内容 - 以及您编写此代码的事实建议你没有)

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


【解决方案1】:

现在我从 cshtml 文件中删除了 JQuery 并简单地使用了 post 方法

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

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

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; }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    相关资源
    最近更新 更多