Автоматическая привязка ASP.NET ObjectDataSource к повторителю - возможно?

У меня есть класс вопросов:

class Question {
    public int QuestionNumber { get; set; }
    public string Question { get; set; }
    public string Answer { get; set; }
}

Теперь я делаю их ICollection доступными через ObjectDataSource и отображаю их с помощью Repeater, привязанного к DataSource. Я использую ‹% # Eval (" Question ")%> для отображения вопроса, и я использую TextBox и ‹% # Bind ("Answer")%> для принять ответ.

Если мой ObjectDataSource возвращает три объекта Question, то мой Repeater отображает три вопроса с текстовым полем после каждого вопроса, чтобы пользователь мог дать ответ.

Пока работает отлично.

Теперь я хочу взять ответ пользователя и вернуть его в соответствующие классы вопросов, которые я затем сохраню.

Разве фреймворк должен позаботиться обо всем этом за меня? Я использовал метод Bind, я указал DataSourceID, я указал метод Update в моем классе ObjectDataSource, но, похоже, нет никакого способа фактически запустить все это.

Я попытался добавить кнопку Command и в код, стоящий за вызовом MyDataSource.Update (), но он пытается вызвать мой метод Update без параметров, а не с ожидаемым параметром Question.

Конечно, есть простой способ добиться всего этого с минимальным выделением кода или без него?

Кажется, что все кусочки есть, но не хватает клея, чтобы склеить их все вместе.

Помощь!

Энтони


person littlecharva    schedule 09.09.2008    source источник


Ответы (4)


Вы должны обработать событие обратной передачи (нажатие кнопки или что-то еще), а затем перечислить элементы повторителя следующим образом:

foreach(RepeaterItem item in rptQuestions.Items)
{
   //pull out question
   var question = (Question)item.DataItem;
   question.Answer = ((TextBox)item.FindControl("txtAnswer")).Text;

   question.Save() ?  <--- not sure what you want to do with it
}
person Ben Scheirman    schedule 09.09.2008
comment
DataItem всегда имеет значение null, поэтому это недопустимо. - person paulwhit; 21.03.2009
comment
как ты повязываешь ретранслятор? DataItem не должен иметь значение null. - person Ben Scheirman; 21.03.2009

Метод bind на самом деле не для повторителя, он больше для просмотра формы или сетки, где вы редактируете только один элемент в списке, а не каждый элемент в списке.

На обоих вы нажимаете кнопку редактирования, которая затем дает вам связанные элементы управления (привязанные с помощью привязки), а затем нажимаете ссылку сохранения, которая автоматически сохраняет элемент обратно в ваш источник данных без какого-либо кода.

person Solmead    schedule 09.09.2008

Тогда какой смысл в методе Bind (в отличие от метода Eval), если мне нужно вручную привязать все резервные копии при обратной передаче?

person littlecharva    schedule 09.09.2008

Бен: Попробовав его, item.DataItem всегда имеет значение null, и, согласно следующему сообщению, он не предназначен для использования таким образом:

http://www.netnewsgroups.net/group/microsoft.public.dotnet.framework.aspnet/topic4049.aspx

Так как же мне связать его вручную?

person littlecharva    schedule 10.09.2008