查看返回空模型到Controller

时间:2014-08-04 21:24:11

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

我目前正致力于制作一种植物维基。我们开始做的第一件事是网站中用户的管理。为此我们制作了这个视图,显示了从数据库中搜索的结果。搜索工作正常,ViewData [" datos"]返回它应该的内容,在此表中我们显示用户(来自Model Usuario)。最后,对于每个用户,它应该显示一个按钮,将该用户的Model发送给另一个Controller。问题是Controller收到一个空模型。 这是View的代码。具有值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>
}

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

我们还尝试为模型中的每个属性创建一个Html.HiddenFor,但它仍然无法正常工作。 请记住,我(和我的团队成员)在ASP.NET MVC 4中是全新的

1 个答案:

答案 0 :(得分: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