2 Stimmen

Dynamisches Umfrageformular in asp.net

Ich habe derzeit eine Datenbankstruktur, die ungefähr so aussieht, wie ich sie unten habe, und frage mich, wie ich am besten dynamische Formulare erstellen kann, die auf der Datenbank für den Frage- & Antwort-Teil basieren. Außerdem, was ist der sicherste Weg, dies zu tun?

FrageID | Frage                                                                 | AnzeigeReihenfolge
--------------------------------------------------------------------------------------
1          | Geben Sie die Adressen an, an denen Sie in den letzten 10 Jahren gelebt haben            | 1
2          | Wie viel Holz könnte ein Holzhacker hacken, wenn ein Holzhacker Holz hacken könnte | 2

AntwortID | FrageID | Antwort           | AntwortTyp        | AnzeigeReihenfolge
-----------------------------------------------------------------------------
1        | 1          | Adresse                 | Text            | 1
2        | 1          | Stadt                    | Nachschlagen          | 2
3        | 1          | Staat                   | Nachschlagen          | 3
4        | 2          | Geben Sie Ihre Schätzung ein  | Text            | 1

AntwortID| PersonID | FrageID | AntwortID | AntwortWert
--------------------------------------------------------------
1         | 1        | 1          | 1        | 123 W Fake St
1         | 1        | 1          | 2        | Las Vegas
1         | 1        | 1          | 3        | Nevada
2         | 2        | 1          | 1        | 456 W Fake St
2         | 2        | 1          | 2        | Seattle
2         | 2        | 1          | 3        | Washington
1         | 1        | 2          | 1        | Was für eine dumme Frage

Vielen Dank im Voraus

6voto

NakedBrunch Punkte 47125

Scott Mitchell hat ein großartiges 4-teiliges Tutorial mit dem Titel "Erstellen einer dynamischen datengesteuerten Benutzeroberfläche" zusammengestellt, das Benutzeroberflächen basierend auf einem Datenmodell dynamisch erstellt. Du wirst wahrscheinlich viel Arbeit und Tests machen müssen, aber es ist machbar.

Du solltest auch die 4-teilige Videoserie "Erstellen eines Quiz-Systems" unter www.asp.net ansehen und prüfen, ob es hilfreich ist. Je mehr du sehen kannst, wie so etwas gemacht wird, desto besser.

1voto

fdfrye Punkte 1099

Es ist lustig, dass jemand Scott Mitchell erwähnt, denn auf einer Konferenz habe ich ihm eine ziemlich ähnliche Frage gestellt und er hat mich in einer E-Mail an David Fowler cc'd, der einen Blogbeitrag zu dem Thema geschrieben hat. Grundsätzlich war die Antwort, die er mir gegeben hat, dass das ASP.net-Team viele interessante Ideen für Controls hat, die Probleme wie diese viel einfacher lösen werden, aber sie sind schwer in den finalen Releases zu integrieren. Ein solches Control war der "SpecialRepeater", den ich eher als einen rekursiven Repeater betrachte.

Der Blogbeitrag ist hier: Externe ITemplates und Hierarchisches Databinding

Im Grunde wirft man einen ObjectDataSource auf seine Seite, bindet jedes Frage-Objekt an das äußere Template und setzt dann die DataSource-Eigenschaft im InnerTemplate auf die QuestionOption-Eigenschaft Ihrer Originalfrage.

Dies setzt natürlich voraus, dass Sie über ein Datenmodell verfügen, das es Ihnen ermöglicht, ein Frage-Objekt mit einer Eigenschaft namens "QuestionsOptions" oder etwas Ähnlichem zurückzugeben, das eine Sammlung eines anderen Typs mit allen speziellen erforderlichen Eigenschaften ist.

Als Anmerkung am Rande, das Ganze scheint so, als ob es ziemlich einfach durch den alten "OnDataBound()" Trick gehandhabt werden kann...und manchmal kann es auch...aber das macht den Code hinter dem Code etwas unübersichtlicher und dieses Control ist ziemlich raffiniert darin, den gesamten Prozess auf der .aspx-Seite vollständig deklarativ zu gestalten...

-1voto

matt-dot-net Punkte 4206

Der beste Weg, Formulare zu erstellen, wäre programmgesteuert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X