【问题标题】:View returning empty model to Controller查看将空模型返回给控制器
【发布时间】:2014-08-04 21:24:11
【问题描述】:

我目前正在制作一种植物维基。我们开始做的第一件事是管理站点中的用户。为此,我们制作了这个视图,显示了从数据库中搜索的结果。搜索工作正常,并且 ViewData["datos"] 返回了它应该返回的内容,并且在此表中我们显示了用户(来自 Model Usuario)。最后,对于每个用户,它应该显示一个按钮,该按钮将该用户的模型发送到另一个控制器。问题是控制器接收到一个空模型。 这是视图的代码。值为 Editar 的输入是应该发送模型的输入。

@model AtlasPlantasMedicinales.Models.Usuario
@{
    ViewBag.Title = "Tabla";
}

@if (ViewData["datos"]!=null){ 

        <table>
        @foreach (var elemento in (List<AtlasPlantasMedicinales.Models.Usuario>)(ViewData["datos"]))
        {
            <tr>
                <td>
                    @elemento.Nombre
                </td>
                <td>
                    @elemento.Carrera
                </td>
                <td>
                    @elemento.Institucion
                </td>
                <td>
                    @elemento.usuario
                </td>
                <td>
                    @elemento.correo
                </td>
                @using (Html.BeginForm("FormularioEditar", "Usuario", FormMethod.Post))
                {
                    <td>@Html.HiddenFor(m => elemento) <input type="submit" value="Editar"></td>
                }
            </tr>
        }
        </table>
}

我们如何将 elemento 中的模型发送到控制器?

我们也尝试过为模型中的每个属性创建一个 Html.HiddenFor,但它仍然不起作用。 请记住,我(和我的队友)是 ASP.NET MVC 4 的新手

【问题讨论】:

  • 您需要为每个模型的属性添加一个隐藏字段 - 而不是整个模型。 MVC 无法将整个模型序列化为单个表单字段值。
  • 您需要表格来附上您的所有财产。您可能应该使用@Html.DisplayEditorFor()。
  • 我们已经尝试过了。我们为每个属性写了@Html.HiddenFor(m => elemento.propriety),但它仍然发送一个空模型。 @蚂蚁P
  • 包括你的控制器后操作方法

标签: asp.net asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

这是一个模型绑定问题。如果您愿意使用默认的模型绑定器,请使用 for 循环而不是 foreach。您的代码将如下所示(由于您没有发布 Model/ViewModel,我将使用 ModelId 作为属性,并使用 usuario 作为值):

@for (int i = 0; i < (List<AtlasPlantasMedicinales.Models.Usuario>)(ViewData["datos"])).Count(); i++)
{
    var elemento = (List<AtlasPlantasMedicinales.Models.Usuario>)(ViewData["datos"])).ElementAt(i);

            <tr>
                <td>
                    @elemento.Nombre
                </td>
                <td>
                    @elemento.Carrera
                </td>
                <td>
                    @elemento.Institucion
                </td>
                <td>
                    @elemento.usuario
                </td>
                <td>
                    @elemento.correo
                </td>
                @using (Html.BeginForm("FormularioEditar", "Usuario", FormMethod.Post))
                {
                    <td>@Html.HiddenFor(m => m.ModelId, new { @Value = elemento.usuario }) <input type="submit" value="Editar"></td>
                }
            </tr>
        }

现在,在控制器中,您将收到 Usuario 模型,其中仅初始化了 ModelId 属性。 有关模型绑定的更多信息,我建议您阅读 Scott Hanslman 撰写的 blog post

【讨论】:

    猜你喜欢
    • 2013-10-09
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    相关资源
    最近更新 更多