Frage

Ich habe eine Frageklasse:

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

Jetzt mache ich eine ICollection davon über eine ObjectDataSource verfügbar und zeige sie mithilfe eines an die DataSource gebundenen Repeaters an.ich benutze <%#Eval("Frage")%> um die Frage anzuzeigen, und ich verwende eine TextBox und <%#Bind("Answer")%> eine Antwort akzeptieren.

Wenn meine ObjectDataSource drei Question-Objekte zurückgibt, zeigt mein Repeater die drei Fragen mit einem Textfeld nach jeder Frage an, damit der Benutzer eine Antwort geben kann.

Bisher funktioniert es super.

Jetzt möchte ich die Antwort des Benutzers zurück in die relevanten Frageklassen einfügen, die ich dann beibehalten werde.

Sicherlich sollte das Framework das alles für mich erledigen?Ich habe die Bind-Methode verwendet, eine DataSourceID angegeben und eine Update-Methode in meiner ObjectDataSource-Klasse angegeben, aber es scheint keine Möglichkeit zu geben, das Ganze tatsächlich in Gang zu bringen.

Ich habe versucht, eine Befehlsschaltfläche und im Code hinter dem Aufruf von MyDataSource.Update() hinzuzufügen, aber es wird versucht, meine Update-Methode ohne Parameter aufzurufen, und nicht mit dem erwarteten Frageparameter.

Sicherlich gibt es eine einfache Möglichkeit, all dies mit wenig oder gar keinem CodeBehind zu erreichen?

Es scheint, als wären alle Teile vorhanden, aber es fehlt etwas Kleber, um sie alle zusammenzuhalten.

Helfen!

Antonius

War es hilfreich?

Lösung

Sie müssen das Postback-Ereignis (Schaltflächenklick oder was auch immer) verarbeiten und dann die Repeater-Elemente wie folgt auflisten:

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
}

Andere Tipps

Die Bindungsmethode ist eigentlich nicht für den Repeater gedacht, sondern eher für die Formansicht oder Rasteransicht, bei der Sie nur ein Element in der Liste und nicht jedes Element in der Liste bearbeiten.

Bei beiden klicken Sie auf die Schaltfläche „Bearbeiten“, die Ihnen dann die gebundenen Steuerelemente (Bindung mit Bind) zur Verfügung stellt, und klicken dann auf den Link „Speichern“, wodurch das Element automatisch und ohne Code dahinter in Ihrer Datenquelle gespeichert wird.

Was nützt dann die Bind-Methode (im Gegensatz zur Eval-Methode), wenn ich beim Postback alles manuell wieder binden muss?

Ben:Nachdem ich es ausprobiert habe, ist item.DataItem immer null und laut dem folgenden Beitrag ist es nicht für die Verwendung auf diese Weise konzipiert:

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

Wie um alles in der Welt kann ich es manuell wieder binden?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top