Comment ajouter une liste à la Vue du Modèle MVC
Je suis en utilisant MVC 3 avec la Vue du Modèle, dans mon cas, j'ai un Modèle de Vue qui devrait afficher une liste d'éléments et aussi un formulaire pour insérer une entrée.
J'ai un problème à mon avis, car je ne suis pas en mesure d'associer le Formulaire pour insérer des données avec le modèle de vue, pourriez-vous me dire ce que je fais mal?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using TestGuestBook.Models;
namespace TestGuestBook.ViewModel
{
public class ListAddCommentsViewModel
{
public int CommentId { get; set; }
[Required]
public string Nominative { get; set; }
[Email]
public string Email { get; set; }
[Required]
public string Content { get; set; }
public List<Comment> CommentItems { get; set; }
}
}
Vue
@model IEnumerable<TestGuestBook.ViewModel.ListAddCommentsViewModel>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>ListAddCommentsViewModel</legend>
<div class="editor-label">
@Html.LabelFor(model => model.CommentId)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.CommentId)
@Html.ValidationMessageFor(model => model.CommentId)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Nominative)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Nominative)
@Html.ValidationMessageFor(model => model.Nominative)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Email)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Content)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Content)
@Html.ValidationMessageFor(model => model.Content)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
CommentId
</th>
<th>
Nominative
</th>
<th>
Email
</th>
<th>
Content
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.CommentId)
</td>
<td>
@Html.DisplayFor(modelItem => item.Nominative)
</td>
<td>
@Html.DisplayFor(modelItem => item.Email)
</td>
<td>
@Html.DisplayFor(modelItem => item.Content)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
</td>
</tr>
}
</table>
- À votre avis, vous avez un formulaire pour créer un nouveau commentaire et une table pour afficher tous les commentaires, ne vous? Pourriez-vous mettre votre code de contrôleur?
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de passer un
Collection
à votre Vue. Un seul objet de ce Dernier est assez. VotreViewModel
déjà propriété de holde la collection (Liste deComments
)Dans votre
GET
Action, retourner une seule instance de ce dernier à la Vueet maintenant, à votre avis, Laissez-le se lier à une seule instance de
ListAddCommentsViewModel
Et à l'Intérieur de votre vue, pour Afficher la Liste de vos commentaires, utilisez le type de Collection de propriété (
Model.CommentItems
) dans votreViewModel
C'est la meilleure solution, j'avais vérifié, presque toutes les informations et c'est la un travail!! Grâce