2009-05-19 3 views
0

모델 바인딩 목록

과 같은 컨트롤러 동작이 있습니다.
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가 달라야한다는 것입니다. 이름에 "[", "]"이 허용되지만 ID는 없습니다.

0

thisthis 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

나는 Scott Hanselman의 게시물이 아마도 대답을 가지고 있다고 생각한다. 그러나 게시물에 반환하여 익명의 객체에 대한 참조를 연결하려고 시도하는 것 같습니다. ...0.Answer=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> 
<% } %> 

리처드