将 Ajax 值发布到控制器时丢失完整模型

Losing complete Model when posting Ajax values to controller

我想要做的是有 2 个列表框(左、右),其中左边是所有产品实体,除了我的合同实体中存在的那些,右边是我的合同实体中的产品。

我遇到这个问题,当我传递 1 个参数(字符串)时,我可以在我的控制器中正确接收它们,但是每当我将它作为第二个参数传递我的模型时,我完全失去了我的模型。这就是我所拥有的:

控制器:

public ActionResult EditContract(ContractViewModel model, string selectedProducts)

查看(Javascript/JQuery):

  function GetSelectedProducts() {

        var listbox = document.getElementById("productsForContractListbox");
        var txt = "";
        var i;

        for (i = 0; i < listbox.length; i++) {
            txt = txt + "\n" + listbox.options[i].text;
        }

        $('#SelectedProductForContracts').val(txt);
        var selectedProducts = $('#SelectedProductForContracts').val();

        var model = $('form').serialize;

        $.post('@Url.Action("EditContract", "Contract")', { "model": model, "selectedProducts": selectedProducts});
    }           

Html 帮助列表框:

// listbox for my contract products
@Html.ListBoxFor(c => c.Contract.Products, productsForContract, new { ID = "productsForContractListbox", @class = "form-control" })

// listbox where all products except the ones in my contract are loaded
@Html.ListBox("allProducts", allProducts, new { ID = "allProductsListbox", @class = "form-control" })

我模型中 SelectedProductForContracts 的 HiddenFor:

@Html.HiddenFor(c => c.SelectedProductForContracts, new { ID = "SelectedProductForContracts", name = "SelectedProductForContracts" })

型号:

[HiddenInput(DisplayValue = false)]
public List<SelectListItem> SelectedProductForContracts { get; set; }

当 post 数据仅包含 selectedProducts 时,我得到了我的值但失去了我的模型,当我添加我的模型时我得到了我的模型但失去了我的 selectedProducts 值。

我尝试了一些类似 的方法,但无法让它们在我的情况下工作(我可能做错了什么,但不知道是什么...)

任何人都可以帮助我找到实现这一目标的正确方法,因为我看到了很多方法,但我希望必须有一种优雅的方法将所有内容绑定到一个模型而不必使用 javascript/Jquery?

亲切的问候!

List<SelectListItem> 无法在单个隐藏变量中定义