Je suis actuellement en train de créer une vue Modifier/Créer partagée pour mon projet de révision de jeu et j'ai rencontré un problème. Chaque jeu peut être un titre sur une variété de plates-formes. J'ai mappé comme une relation plusieurs-à-plusieurs dans mon modèle EF4. Pour ma part, j'aimerais avoir une série de cases à cocher avec les noms de chaque plate-forme, et, pour la vue Éditer, avoir les cases correctes cochées.ASP.NET MVC2 et EF4 - Création de cases à cocher dans une vue d'édition
Je peux facilement créer les cases à cocher avec un assistant HTML. Mon plus gros problème est de savoir comment dire à l'assistant d'allumer isChecked sur les valeurs correctes de la plate-forme. Voici ce que j'ai jusqu'à présent:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<HandiGamer.ViewModels.AdminGameReviewViewModel>" %>
<p>
<%: Html.LabelFor(model => model.GameData.GameTitle) %>
<%: Html.TextBoxFor(model => model.GameData.GameTitle) %>
<%: Html.ValidationMessageFor(model => model.GameData.GameTitle) %>
</p>
<p>
<%: Html.LabelFor(model => model.Genres) %>
<%: Html.DropDownList("Genre", new SelectList(ViewData["Genres"] as IEnumerable, "GenreID", "Name", Model.GameData.GenreID) %>
</p>
<p>
<%: Html.LabelFor(model => model.Platforms) %>
<% foreach(var item in Model.Platforms) { %>
<%: Html.CheckBox(item.Name) %>
<% } %>
</p>
Et, mon modèle de vue est le suivant:
public class AdminGameReviewViewModel
{
public Game GameData { get; set; }
public List<Genre> Genres { get; set; }
public List<Platform> Platforms { get; set; }
}
Peuplé par:
public ActionResult EditReview(int id)
{
var game = _siteDB.Games.Include("Genre").Include("Platforms").Include("Content").Single(g => g.GameID == id);
var genres = _siteDB.Genres.ToList();
var platforms = _siteDB.Platforms.ToList();
var model = new { GameData = game, Genres = genres, Platforms = platforms };
return View(model);
}
Donc, je vraiment juste besoin d'un petit coup de pouce dans la bonne direction avec la logique pour déterminer quelles boîtes doivent être vérifiées.
Merci.
Une partie de mon problème est que je ne suis pas familier avec la liaison MVC et la création de formulaires. Les plates-formes partagent une relation plusieurs-à-plusieurs avec les jeux, mais la seule chose qui les relie est un tableau croisé dynamique, qui n'est pas réellement visible dans mon modèle EF4. Je dois avoir une liste de toutes les plates-formes disponibles, ce qui est ce que Platforms est dans mon modèle de vue, mais je ne sais pas comment mapper les plates-formes actuelles de mon GameData à la liste globale des plates-formes. Même si j'ajoute une autre propriété à mon modèle de vue, le problème persisterait - ne sachant pas comment définir isChecked sur les plates-formes correctes de la liste. –
Oui, j'ai une configuration similaire dans mon modèle EF4 (conte de jonction caché pour répondre à beaucoup-à-plusieurs). Quand vous dites 'ne sachant pas comment placer isChecked sur les plates-formes correctes dans la liste', que voulez-vous dire? Quelle valeur vérifiez-vous? Rappelez-vous qu'une case à cocher représente une valeur true/false. Voulez-vous dire que vous voulez être en mesure de supprimer une association à une plate-forme particulière quand ils décochent la boîte? – RPM1984
Oui, ou définissez une nouvelle association avec une plate-forme différente dans la liste de toutes les plates-formes disponibles. Donc, si PS3 est cochée, je devrais pouvoir l'enlever et/ou vérifier XBox 360. –