2012-02-23 5 views
1

Я читал сотни сообщений в блогах и вопросах ASP.NET по StackOverflow, но я не могу найти решение этой (по-видимому) простой проблемы. Вот упрощенная версия:Список <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

Спасибо. Я собираюсь использовать второе решение, но только потому, что не понимаю первого. Сбор (Список) строк должен быть базовым, это не сложный объект со свойствами. Должен ли я действительно создавать EditorTemplate для рендеринга простого текстового поля и передать список контроллеру? (Обратите внимание, что я уже могу передать его контроллеру, как я уже говорил ранее, но список не привязан к модели!). – daliz

Смежные вопросы