2012-02-23 128 views
1

我一直在閱讀ASP.NET博客和StackOverflow上的數百篇帖子,但是我找不到解決這個(顯然)簡單問題的方法。這裏是一個簡化的版本:List <string> binding

問題類

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.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 2012-02-23 23:02:28