Mi pregunta es cómo conseguir que la tabla de datos desde el controlador a la vista?

Tengo clase en mi modelo:

public class Company
{
    public string Name { get; set; }
    public int ID { get; set; }
    public string Address { get; set; }
    public string Town { get; set; }
}

y me pase de lista de las Empresas que a mi punto de vista como:

    @model IEnumerable<MyTestApp.Web.Models.Company>
    ....
    @using (Html.BeginForm("Edit", "Shop"))
    {
    <table id="example">
        <thead>
            <tr>
                <th>
                    @Html.DisplayNameFor(model => model.Name)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.Address)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.Town)
                </th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model) {
                <tr>
                    <td>
                        @Html.EditorFor(modelItem => item.Name)
                    </td>
                    <td>
                        @Html.EditorFor(modelItem => item.Address)
                    </td>
                    <td>
                        @Html.EditorFor(modelItem => item.Town)
                    </td>
                </tr>
            }   
        </tbody>
    </table>

    <input type="submit" value="Submit" />
}

Y todo parece ok, pero no puedo entender cómo obtener los datos modificados en el controlador? He utilizado los siguientes enfoques:

public ActionResult Edit(IEnumerable<Company> companies)
    {
        //but companies is null
        //and ViewData.Model also is null

        return RedirectToAction("SampleList");
    }

Necesito tener acceso a los objetos modificados, ¿qué estoy haciendo mal?

ACTUALIZACIÓN: Gracias a webdeveloper, sólo necesitaba usar «para» bucle en lugar de ‘foreach’ bucle. Versión derecha es

<tbody>
        @for (int i = 0; i < Model.Count(); i++ ) {
            <tr>                   
                <td>
                    @Html.EditorFor(modelItem => modelItem[i].Name)
                </td>
                <td>
                    @Html.EditorFor(modelItem => modelItem[i].Address)
                </td>
                <td>
                    @Html.EditorFor(modelItem => modelItem[i].Town)
                </td>
            </tr>
        }   
    </tbody>
InformationsquelleAutor azhidkov | 2013-01-22

2 Comentarios

  1. 1

    Creo que le falta la Company‘s ID en el formulario para que el modelo pueda ser enlazado correctamente.

    Debe agregar como este:

    @using (Html.BeginForm("Edit", "Shop"))
    {
    <table id="example">
        <thead>
            <tr>
                <th>
                    @Html.HiddenFor(model => model.ID)
                    @Html.DisplayNameFor(model => model.Name)
                </th>
                ...

    De lo contrario el resto de su código parece estar bien.

    • Gracias, Yannick, pero traté de esto ahora mismo y no funciona para mí.

Dejar respuesta

Please enter your comment!
Please enter your name here