Question

J'apprends MVC en utilisant la version v2 avec Entity Framework v4. Disons que j'ai 3 objets Jeu, Points et les joueurs. Ils sont liés de la manière suivante: Le jeu a des points et des points peut avoir un joueur qui leur est associé (1 jeu à de nombreux points et un objet Point peut avoir un joueur).

Je cherche à utiliser les EditTemplates disposent dans MVC2 pour rendre mon point de vue. À mon avis Edit Game Je veux avoir l'information d'objet de jeu de base modifiable, ainsi que les objets Points connexes. Actuellement, je suis en utilisant « <%= Html.EditorForModel() %> » (ce qui semble assez lent) pour rendre l'Edition et j'ai un jeu spécifique et point EditTemplates.

Les données rend correctement et est modifiable tant pour le jeu et l'information Point. Quand je vais à effectuer la mise à jour et soumettre le formulaire que je reçois l'objet « Game » dans ma mise à jour ActionResult. Les propriétés de base sont peuplées de l'objet de jeu, mais les propriétés profondes telles que les points ne sont pas; ils apparaissent comme nuls. Si je regarde les variables Request.Form dans debug je peux voir les champs Points sont transmis au serveur, mais ne se placent pas en arrière dans l'objet du jeu.

Dans mon EditTemplate Game J'utilise ce qui suit pour rendre les objets Points:

<%= Html.EditorFor(c => c.Points) %>

Mes Points EditTemplate ressemble à:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Domain.Model.Entities.Point>" %>

<%= Html.EditorFor(c => c.PntId)%>
<tr><td><%= Html.DisplayFor(c => c.User.Username)%></td><td><%= Html.EditorFor(c => c.UserPnt)%></td></tr>

Mon HTML qui est rendu présente comme suit:

<input id="Points_Points_0__PntId" name="Points.Points[0].PntId" type="hidden" value="226" />
<tr><td>Jay</td><td><input class="text-box single-line" id="Points_Points_0__UserPnts" name="Points.Points[0].UserPnts" type="text" value="20" /></td></tr>

<input id="Points_Points_1__PntId" name="Points.Points[1].PntId" type="hidden" value="227" />
<tr><td>Joe</td><td><input class="text-box single-line" id="Points_Points_1__UserPnts" name="Points.Points[1].UserPnts" type="text" value="20" /></td></tr>

Comment puis-je obtenir les propriétés profondes republier dans l'objet du jeu qui est acceptée par la mise à jour du contrôleur ActionResult afin que je puisse les mettre à jour en même temps?

Mise à jour: Cela semble certainement être un problème avec la façon dont le EditTemplate est rendu la collection Points. Si j'ajoute manuellement ce qui suit à la vue, il ne semble correctement dans l'objet du jeu:

<input class="text-box single-line" id="Game_Points_0__UserPnts" name="Game.Points[0].UserPnts" type="text" value="20" />
        <input class="text-box single-line" id="Game_Points_1__UserPnts" name="Game.Points[1].UserPnts" type="text" value="20" />

Toute idée pourquoi cela est rendu comme « Points.Points [index] au lieu de Game.Points [index] J'ai essayé de jouer avec les paramètres du EditFor:

<%= Html.EditorFor(c => c.Points,null,"Game.Points") %>

mais les entrées rendent comme Game.Points.Game.Points [index]

Était-ce utile?

La solution

Ceci est apparemment un bug dans les premières versions de MVC. D'après le commentaire que je reçus de Microsoft sur le forum MVC il semble être corrigé dans la version RTM.

J'ai revenir à l'utilisation de la boucle pour générer le code HTML dans le même temps.

Voici la réponse du forum MVC pour référence: http://forums.asp.net/t/1515461.aspx

Autres conseils

Ils doivent être nommés Game.Points [0] .PntId ou vous pouvez ajouter des points comme argument à votre action et les combiner en action. Especcially si vous les persistez dans DB, vous avez gona de les attacher.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top