ASP.NET ObjectDataSource Привязка автоматически к повторителю - возможно? - PullRequest
1 голос
/ 09 сентября 2008

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

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

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

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

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

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

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

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

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

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

Помощь!

Anthony

Ответы [ 4 ]

1 голос
/ 09 сентября 2008

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

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

1 голос
/ 09 сентября 2008

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

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
}
0 голосов
/ 10 сентября 2008

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

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

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

0 голосов
/ 09 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...