Hacer tablas HTML en MVC4 usando modelos fuertemente tipados

Estoy intentando hacer una tabla HTML con datos que extraigo de DB ...

Aquí está mi modelo...

public class PopulationModels
{
    public List<PopulationModel> Populations { set; get; }
}

Que es simplemente una lista de...

public class PopulationModel
{
    public string populationID { set; get; }

    public string PopName { set; get; }

    public string Description { set; get; }

    public string PopulationType { set; get; }

    public Boolean isActive { set; get; }

    //public List<XSLTACOData> patients { set; get; }
}

Le paso este modelo a mi vista así...

IEnumerable<PopulationModels> PopModel = DataRepo.Get(userName);
return View(PopModel);

Intento mostrar una lista de la siguiente manera...

@foreach (var item in Model) {
<tr>
    <td class="rowControl hidden">
        @*<a href="#makeRowEditable" class="makeRowEditable">Edit</a>*@ |
        @*<a href="#deleteRow" class="deleteRow">Delete</a>*@
        @Html.DispalyFor(modelItem => item.Populations)
    </td>
</tr>
}

Pero tengo dificultades para descubrir cómo acceder a los elementos individuales de mi modelo...

En el

@Html.DispalyFor(modelItem => item.Populations)

La línea de código anterior, quiero tomar cada modelo de población individual y mapear una columna para cada uno de los campos... Pero parece que no puedo acceder a las poblaciones individuales... ¿Me estoy perdiendo un paso lógico aquí (obviamente estoy , pero ¿qué paso?)

ACTUALIZACIÓN: AÑADIR ALGO MÁS DE LA VISTA: Ahora estoy haciendo una mesa, pero la forma en que lo hago parece contradictoria...

Aquí está mi modelo ...

 @model IEnumerable<FocusedReadMissionsRedux.Models.PopulationModels>

Así es como estoy creando mi tabla (planeo usar la funcionalidad tableToGrid de jqGrid tan pronto como pueda obtener una forma sólida de acceder a mis datos ...

<table border="2">
<thead>
  <tr>
  <th>
    Population Name
  </th>
   <th>
    Population Description
  </th>
  </tr>
</thead>
@foreach(var item in Model){
foreach (var pop in item.Populations)
{
<tr>
    <td class="rowControl hidden">
        @Html.DisplayFor(modelItem => pop.PopName)
        @Html.ActionLink(pop.PopName,"","")
    </td>
    <td>
        @Html.DisplayFor(modelItem => pop.Description)
        @Html.Display(pop.Description)
    </td>
</tr>
}

}

preguntado el 22 de mayo de 12 a las 16:05

2 Respuestas

Como no publicó el código completo para su vista: debe definir a qué tipo de objeto se vincula en su vista de esta manera:

@model IEnumerable<PopulationModels>

Luego, puede recorrerlo con un foreach y vincularlo al elemento actual usando:

@Html.DisplayFor(x => x.Popname)

contestado el 22 de mayo de 12 a las 17:05

Intento no publicar demasiado código. No quiero regalar la granja aquí. Pero actualizaré mis comentarios con un poco más. Parece que he creado la tabla, pero la forma en que lo estoy haciendo parece contraria a la intuición... Me preguntaba si podría echar un vistazo y ver dónde podría estar fallando. - SoftwareSavant

Primero... Una buena convención de nomenclatura es cambiar el nombre de su

PopulationModels

a

PopulationList

Esto le da a otros programadores que vienen detrás de usted una idea del propósito del modelo.

Trae tu modelo:

@model Models.PopulationList

Luego, podemos recorrer la lista de modelos con un bucle foreach o for:

<table>
    <thead>
        <tr>
            <th>Population Name</th>
            <th>Population Description</th>
        </tr>
    </thead>
    <tbody>
    @foreach(Population pop in PopulationList)
    {
       <tr>
          <td>@Html.DisplayFor(model => pop.PopName)</td>
          <td>@Html.DisplayFor(model => pop.PopDesc)</td>
       </tr>
    }
    </tbody>
 </table>

Solo necesita un ciclo foreach, porque está iterando un modelo en su lista del modelo.

¡Espero que esto ayude para futuras referencias!

respondido 06 nov., 13:13

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.