Списки связывания моделей - PullRequest
0 голосов
/ 19 мая 2009

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

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

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

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

Ответы [ 3 ]

0 голосов
/ 19 мая 2009

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

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

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

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

0 голосов
/ 12 октября 2009

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

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

0 голосов
/ 19 мая 2009

Посмотрите на это и этот вопрос . Также это сообщение в блоге .

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

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