2012-02-23 14 views
1

私は、ASP.NETブログやStackOverflowに関する質問を何百も読んできましたが、この(明らかに)単純な問題の解決策を見つけることはできません。リスト<string>バインディング

質問クラス

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

私はQuestionオブジェクトを作成するための簡単なフォームを持っている:ここでは単純化されたバージョンです。私は自動EditorForがコレクションのために存在しないことを知っているので、私はして試してみました:私のフォームで

:私のコントローラで

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

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

答えが正しく渡されますが、彼らは私のモデルに束縛されていません!

質問#:質問リストにこの文字列を自動的に結びつける方法がありますか?

は、その後、私はやって、私のモデルで一覧があることをこのリストを「強制」してみました:

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を作成する必要がありますか? (以前は言ったように、私はすでにコントローラに渡すことができますが、Listはモデルにバインドされていないことに注意してください)。 – daliz