2012-02-23 8 views
1

나는 StackOverflow에 대한 ASP.NET 블로그 및 질문에 대한 수백 권의 게시물을 읽었지 만이 (분명히) 간단한 문제에 대한 해결책을 찾을 수 없습니다.목록 <string> 바인딩

질문 클래스

public class Question 
{ 
    public int QuestionId { get; set; } 
    public string QuestionBody { get; set; } 
    public List<string> Answers { get; set; } 
} 

나는 질문 객체의 생성을위한 간단한 양식을 가지고 여기에 단순화 된 버전입니다. 나는 컬렉션에 대한 자동 EditorFor이 아니라는 것을 알고, 그래서으로 시도 :

<div class="editor-field"> 
    @Html.TextBox("Answers") 
    @Html.TextBox("Answers") 
    @Html.TextBox("Answers") 
</div> 
내 컨트롤러에서

: 답변이 제대로 전달

public ActionResult Create(Question question, List<string> Answers) 
... 

하지만 내 양식에

그들은 내 모델에 구속되지 않습니다!

질문 1 :이 문자열 목록을 내 Question 모델에 포함 된 문자열 목록에 자동으로 연결하는 방법이 있습니까?

question.Answers = Answers; 
    db.Questions.Add(question); 
    db.SaveChanges(); 

하지만 내 컬렉션은 항상 빈으로 전달되는 :

는 그럼 난 일을, 내 모델의 목록을 수 있도록이 목록을 "강제"로했습니다. ASP.NET MVC 모델 바인딩 및 유효성 검사 때문입니다.

그래서, 질문 # 2 : "수정"할 수있는 방법을 존재 하는가이 db.SaveChanges와 함께 데이터베이스에 저장되기 직전에 내 질문 객체()?

감사합니다.

답변

0

여기 참조 목록에 대한 편집기 템플릿을 작성해야합니다 :

Editor Templates for List<string>

을하거나 간단히

<div class="editor-field"> 
    @Html.TextArea("Answers") 
</div> 

를 넣을 수 있습니다 복귀 정보가 문자열로 도착하고 당신이 할 수있는 라인별로 그 문자열을 나눠서 Linq 확장자를 사용하여리스트를 만든다 :

public ActionResult Create(Question question, string answers) 
{ 
    var answerList = answers.Split('\n').ToList(); 
    question.Answers = answerList; 
    db.Questions.Add(question); 
    db.SaveChanges(); 
} 
+0

고마워요. 두 번째 해결책을 사용 하겠지만 첫 번째 해결책을 이해할 수 없기 때문입니다. 문자열의 컬렉션 (List)은 기본 유형이어야하며 속성이있는 복잡한 객체는 아닙니다. 간단한 텍스트 상자를 렌더링하고 목록을 컨트롤러에 전달하려면 EditorTemplate을 실제로 만들어야합니까? (이전에 말한 것처럼 이미 컨트롤러에 전달할 수 있지만 목록은 모델에 바인딩되어 있지 않습니다!). – daliz