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

StackOverflow https://stackoverflow.com/questions/52485

Вопрос

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

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

Теперь я делаю ICollection из них доступным через ObjectDataSource и отображаю их с помощью ретранслятора, привязанного к источнику данных.Я использую <%#Оценка("Вопрос")%> чтобы отобразить Вопрос, и я использую текстовое поле и <%#Привязка("Ответ")%> принять ответ.

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

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

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

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

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

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

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

Помогите!

Энтони

Это было полезно?

Решение

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

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
}

Другие советы

Метод bind на самом деле предназначен не для повторителя, а скорее для formview или gridview, где вы редактируете только один элемент в списке, а не каждый элемент в списке.

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

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

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

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

Так как же, черт возьми, мне вручную привязать его обратно?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top