将具有集合引用的模型发布到控制器

本文关键字:控制器 模型 集合 引用 | 更新日期: 2023-09-27 18:31:00

我有一个模型,它的属性是名称,电子邮件...等。还有一个集合。在视图中,我编辑属性并保持集合不变。

当我尝试提交表单时,它会发送更改和未标记的值,但集合丢失。如何处理?

HTML.HiddenFor() - 不起作用。

它失去了所有未在形式上更改的实用程序!(以我使用的形式HTML.EditorFor(Model => Model.Name)

编辑:视图:

<% using (Html.BeginForm("Action", "Controller", FormMethod.Post))
       {%>
    <%: Html.AntiForgeryToken()%>
    <table>
        <tr>
            <td>Name: </td>
            <td>
                <%: Html.EditorFor(Model => Model.Name) %></td>
        </tr>
        <tr>
            <td>Phone: </td>
            <td>
                <%: Html.EditorFor(Model => Model.Phone) %></td>
        </tr>
@h@</table>
    <%} %>

控制器

 [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult SaveModelDealer(User ModelReceived)
        {
            try
            {
                if (ModelState.IsValid)
                {
                        using (Context db = new Context ())
                        {
                            System.Diagnostics.Debug.WriteLine(" " + ModelReceived.ListOfPhones.Count);
                        }
                        return View();
                }
                else
                {
                }
            }
            catch (Exception)
            {
            }
        }

将具有集合引用的模型发布到控制器

只有表单中的属性才会通过 post 发送回服务器。您应该在发布后重新填充集合,就像在HttpGet操作中所做的那样。

如果要保留表单中的项目,但不显示它们,则可以使用隐藏字段。喜欢这个:

@Html.HiddenFor(m => m.ID);

另外,看看这个问题,我举了一个例子来解决你的问题。