2009-05-19 5 views
0

Je suis une action de contrôleur commeModelbinding liste

public class Question { 
    public int Id { get;set; } 
    public string Question { get;set; } 
    public string Answer { get;set; } 
} 

public ActionResult Questions() 
{ 
    return View(GetQuestions()); 
} 

public ActionResult SaveAnswers(List<Question> answers) 
{ 
    ... 
} 

la vue> ressemble:

<% for (int i = 0; i < Model.Count; i++) { %> 
<div> 
    <%= Html.Hidden(i.ToString() + ".Id") %> 
    <%= Model[i].Question %> 
    <%= Html.TextBox(i.ToString() + ".Answer") %> 
</div> 
<% } %> 

Il est évident que ce point de vue ne fonctionne pas. Je ne suis simplement pas en mesure d'accéder à la liste dans la vue.

La documentation pour cela est également obsolète, il semble que beaucoup de fonctionnalités autour des listes de liaison de modèles ont été modifiées dans la version bêta.

Répondre

0

la réponse est de ne pas utiliser les aides html.

<% for (int i = 0; i < Model.Count; i++) { %> 
    <div> 
    <input type="hidden" name="answers[<%= i %>].Id" id="answers_<%= i %>_Id" value="<%= Model[i].Id %>" /> 
    <input type="text" name="answers[<%= i %>].Answer" id="answers_<%= i %>_Answer" value="<%= Model[i].Answer %>" /> 
    </div> 
<% } %> 

Pas très joli, mais fonctionne. L'important est que le nom et l'identifiant doivent être différents. Le nom est autorisé à avoir "[", "]" mais l'identifiant ne l'est pas.

0

Jetez un oeil à this et this question. Aussi this blog post.

Modifier: Pour accéder au modèle dans la vue. Êtes-vous sûr de l'avoir déclaré avec l'attribut suivant?

<%@ Page Language="C#" 
    Inherits="System.Web.Mvc.ViewPage<List<Namespace.Question>>" %> 
//Assuming the GetQuestions() method returns a list of question objects. 
+0

Ces messages concernent principalement l'envoi de vos données dans un modèle après une publication. Je suis un problème, c'est que je ne comprends pas les valeurs du modèle lors du rendu de la première vue. – AndreasN

+0

Je suppose que j'ai mal compris la question au début. J'ai édité ma réponse après votre commentaire. –

0

Je pense que le post de Scott Hanselman détient probablement la réponse. Cependant, il semble que vous essayez de vous lier afficher des références à un objet anonyme en retournant dans le message ...0.Answer=answer...

Vous devriez plutôt lier vos champs à la `Liste des réponses se rapportant aux réponses [index] .Répondre.

les opérations suivantes:

<% for (int i = 0; i < Model.Count; i++) { %> 
<div> 
    <%= Html.Hidden("answer["+i.ToString() + "].Id", Model["+i.ToString() + "].Id) %> 
    <%= Model[i].Question %> 
    <%= Html.TextBox("answer["+i.ToString() + "].Answer", Model["+i.ToString() + "].Answer) %> 
</div> 
<% } %> 

Richard

Questions connexes