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

Posted

技术标签:

【中文标题】将 Ajax 值发布到控制器时丢失完整的模型【英文标题】:Losing complete Model when posting Ajax values to controller 【发布时间】:2019-04-24 04:09:35 【问题描述】:

我想要做的是有 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; 

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

我尝试了几种方法,例如 THIS,但无法让它们在我的情况下工作(我可能做错了什么,但不知道是什么......)

谁能帮助我找到实现这一目标的正确方法,因为我看到了很多方法,但我希望必须有一种优雅的方式将所有内容绑定到 1 个模型,而无需使用 javascript/Jquery?

亲切的问候!

【问题讨论】:

您是否尝试将selectedProducts 属性添加到您的ContractViewModel 视图模型? @Shyju,感谢您的回复。我已将字符串属性添加到我的 ContractViewModel 并将其绑定到 ListboxFor c => c.selectedProducts 但这不起作用。我可以做一个 Request.Form["hiddenForName"] 并处理这些值,但我觉得它的方法不正确? a List 可能无法在单个隐藏变量中定义。 @RichardHubley,是的!你是对的......这行得通。您可以发布它,如果您愿意,我可以将其标记为答案;) 【参考方案1】:

List&lt;SelectListItem&gt; 不能在单个隐藏变量中定义

【讨论】:

此帖子已被标记为低质量,有被删除的危险。请考虑使用给定问题的适当解决方案来编辑​​答案。 @BryceSiedschlaw 这很公平。 OP 确实说这对他们有所帮助。 这确实对我有很大帮助并解决了我的问题,我不知道它不支持 List 文档:docs.microsoft.com/en-us/dotnet/api/…

以上是关于将 Ajax 值发布到控制器时丢失完整的模型的主要内容,如果未能解决你的问题,请参考以下文章

.Net Core Ajax 表单提交不返回非绑定模型属性

使用ajax将@Model从视图发送到控制器

在 spring mvc 的模型属性中保留值

Jquery Ajax 无法将模型发布到控制器

如何使用 jquery ajax 将 web api 控制器中的 web 表单值作为模型类传递

数组值从 JS 丢失到控制器