J'ai une vue mvc composée d'une matrice de boutons radio. Chaque rangée de boutons radio est dans un groupe et représente un objet typé du modèle. En utilisant les conseils de divers blogs et publications, j'ai lié avec succès les résultats de formulaire affichés au tableau de modèles tapé dans l'action du contrôleur, mais je n'arrive pas à inverser l'effet et à lier un modèle existant aux boutons radio tout en conservant leur état sélectionné ou non sélectionné .Liaison de données ASP.NET MVC bidirectionnelle d'un modèle vers une liste de boutons radio en utilisant le modèle dactylographié
Mon modèle contient une propriété appelée "AnswerValue" qui est comprise entre 0 et 4 et doit correspondre aux noms de radiobutton. J'ai essayé de changer la valeur d'index à la valeur de modèle "AnswerId" mais en faisant ainsi la liaison qui fonctionnait ne fonctionne plus (je crois que l'index doit être basé sur zéro). Voici quelques ressources que j'ai utilisées jusqu'à présent: Post et Article by Scott Hanselman pour arriver où je suis maintenant.
Si quelqu'un a un aperçu sur la façon d'effectuer cette liaison à deux voies, il serait très apprécié.
Merci
Mon contrôleur:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Save([Bind(Prefix = "SurveyAnswer")] SurveyAnswer[] responses, int SurveyID)
{
Mon Vue:
<%
int questionIndex = 0;
foreach (SurveyAnswer q in Model)
{
%>
<%=Html.Hidden("SurveyAnswer.Index", questionIndex)%>
<%=Html.Hidden("SurveyAnswer["+questionIndex+"].AnswerId", q.AnswerId) %>
<tr>
<td style='background-color: #aaaaaa;padding-left: 10px; padding-right: 10px;border-right: solid 1px #fffff;'><%= questionIndex+1 %></td>
<td style='text-align: right;'><%= q.Question.DisplayValue %></td>
<td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "0", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue"})%></td>
<td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "1", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue" })%></td>
<td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "2", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue" })%></td>
<td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "3", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue"})%></td>
<td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "4", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue" })%></td>
</tr>
<%
questionIndex++;
}
%>
Si j'utilise le cadre de l'entité et l'entité générée ensemble de, ce qui serait une bonne méthode pour l'extension ceci pour maintenir votre logique recommandée. Merci du coup de main jusqu'à présent. Ça semble fonctionner. – Jeremy
Si vous n'utilisez pas un pattern ViewModel, il est peut-être préférable de le laisser comme ça, car cela impliquera de changer la logique du contrôleur, le type de modèle spectateur à la vue et peut-être vos procédures de validation. Ils sont principalement utilisés lorsque vous avez des modèles complexes (comme 2 ensembles d'entités ou plus combinés dans un seul formulaire ou pour configurer SelectList/RadioButtons/..), si vous voulez jeter un coup d'œil à ce modèle regardez http: // geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx ou la section "Utilisation d'un modèle ViewModel" par ScottGu dans son livre ASP.NET MVC 1.0. – JOBG