J'utilise Linq to SQL dans une application ASP.NET MVC. Le modèle consiste en une table de décisions avec un lien de clé étrangère vers une table Options (une décision, plusieurs options). Le modèle me permet donc d'accéder à la collection Options via la propriété Decision.Options. Je souhaite autoriser mes utilisateurs à mettre à jour la collection Options pour une décision dans une vue distincte de la mise à jour d'autres propriétés Decision. Quel est le meilleur moyen de renvoyer la collection Options dans le contrôleur afin de mettre à jour l'objet Decision? Voici le code:ASP.NET Question du classeur modèle pour la mise à jour de la table enfant
Le contrôleur envoie un modèle de décision aux options Vue:
//
// GET /Decisions/Options/5
[Authorize]
public ActionResult Options(int id)
{
Decision decision = decisionRepository.GetDecision(id);
return View(decision);
}
Ma page d'affichage répertorie simplement le champ Nom de l'option pour les utilisateurs de modifier et soumettre:
<% using (Html.BeginForm())
{%>
<div id="answers">
<table>
<% int i = 0; %>
<% foreach (var item in Model.Options)
{ i += 1;
%>
<tr>
<td>
<label>Option #<%= i%>: </label>
<%= Html.TextBox("Option.Name", item.Name)%>
</td>
</tr>
<% } %>
</table>
<input type="submit" name="button" value="Back" />
<input type="submit" name="button" value="Next" />
</div>
<% } %>
ici est le code du contrôleur pour l'action Options POST:
// POST /Decisions/Options/4
[AcceptVerbs(HttpVerbs.Post), Authorize]
public ActionResult Options(int id, string button, Decision d)
{
Decision decision = decisionRepository.GetDecision(id);
if (decision == null)
return View("NotFound");
if (button == "Back")
{
return RedirectToAction("Edit", new { id = decision.DecisionID });
}
//Update the options in the decision model
//TODO: What's the best way to update the Decision.Options parameter?
//Save options and move on to factors
UpdateModel(decision);
decisionRepository.Save();
return RedirectToAction("Factors", new { id = decision.DecisionID });
}
Sur l'acte POST Pour les options, quelle est la meilleure façon de renvoyer la collection d'éléments d'option?
J'ai essayé de travailler directement avec FormCollection pour convertir un EntitySet en vue d'une affectation à Decision.Options avant d'appeler la méthode Save. Le code ci-dessus a l'objet de décision étant passé, mais la collection d'options est toujours nulle, d'où mon commentaire TODO.
J'ai réussi à modifier directement l'objet Decision, mais j'ai des problèmes avec la mise à jour d'une table enfant dans le modèle en utilisant un classeur modèle ou FormCollection. Toute aide est grandement appréciée!
Merci! J'ai finalement réussi à obtenir le tableau d'options dans la méthode Action, après que je me souvienne que le tableau devait être basé sur 0! Je les avais commencés à un. Merci encore! – kwgainey