列出<string>绑定</string>

时间:2012-02-23 22:29:38

标签: asp.net-mvc model-binding

我一直在阅读关于ASP.NET博客的数百篇帖子和关于StackOverflow的问题,但我找不到这个(显然)简单问题的解决方案。这是一个简化版本:

问题类

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

我有一个简单的表单来创建一个Question对象。我知道没有自动的EditorFor for collections,所以我尝试过:

以我的形式:

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

在我的控制器中:

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

答案是正确传递的,但它们没有绑定到我的模型!

问题#1 :是否存在将此字符串列表自动绑定到我的问题模型中包含的字符串列表的方法?

然后我试图“强制”将此List作为我模型中的List,执行:

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

但是我的收藏总是被传递为空。我认为这是由于ASP.NET MVC模型的绑定和验证。

那么,问题#2 :在使用db.SaveChanges()将问题对象保存到数据库之前,是否存在“修改”问题对象的方法?< / p>

谢谢。

1 个答案:

答案 0 :(得分: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();
}