2009-05-19 5 views
0

Я получил действие контроллера, какModelbinding списки

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) 
{ 
    ... 
} 

вид> выглядит как:

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

Очевидно, что этот вид не работает. Я просто не могу получить доступ к списку в представлении.

Документация для этого также устарела, она, похоже, обладает множеством функциональных возможностей вокруг списков привязки к моделям, которые были изменены в бета-версии.

ответ

0

ответ не использовать 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> 
<% } %> 

Не очень красиво, но работает. Важно то, что имя и идентификатор должны быть разными. Имя разрешено иметь "[", "]", но id нет.

0

Посмотрите на this и this question. Также this blog post.

Редактировать: Что касается доступа к модели в представлении. Вы уверены, что заявили о себе со следующим атрибутом?

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

Эти сообщения в основном касаются получения ваших данных в модели после публикации. Я проблема в том, что я не получаю значения из модели при рендеринге первого представления. – AndreasN

+0

Наверное, я сначала не понял этот вопрос. Я отредактировал свой ответ после вашего комментария. –

0

Я думаю, что сообщение Скотта Гензельмана, вероятно, содержит ответ. Однако кажется, что вы пытаетесь привязать вас к просмотру ссылок на анонимный объект, вернувшись в сообщение ...0.Answer=answer...

Вы должны вместо этого полагать, что привязывайте свои поля к «Ответу списка», ссылаясь на ответы [index] .Answer.

Попробуйте следующее:

<% 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> 
<% } %> 

Ричард