Hallo zusammen!
Ich brauche ein User-Control für folgenden Anwendungsfall:
ich möchte einen "Fragenblock" anzeigen. Das heißt, ich habe ein Question-Objekt, das immer 4 Answers enthält. Jede Antwort besteht aus einem Text und einem Buchstabenwert. Von den 4 Antworten kann und muss nur eine ausgewählt werden (Radiobuttons). Von der selektierten Antwort möchte ich den Buchstaben wegspeichern.
Es sieht also grob so aus:
O Antwort 1
O Antwort 2
O Antwort 3
O Antwort 4
Es gibt mehr Buchstaben als mögliche Antworten pro Frage. Es kann also sein, dass Antwort 1 den Buchstaben A, 2 B, 3 C und 4 D entspricht. Kann aber auch 1=N, 2=X, 3=A und 4=B sein.
Wie kriege ich das so mit einem Benutzersteuerelement umgesetzt, dass ich nur mein Question-Objekt reingebe und ich bei einer Post-Back-Action für den Fragenblock (es können bis zu vier davon auf einer Seite sein) den gewählten Buchstaben bekomme?
Ich steh total auf dem Schlauch und komme mit dem Benutzersteuerelement-Konzept von MVC2 nicht zurecht. Ich freue mich über jeden Hinweis!
Viele Grüße und Danke!
TopperDEL
Hallo,
ich versuche mal deine fragen zu beantworten, sofern ich das richtig verstanden habe was Du umsetzen möchtest.
Es gibt mehr Buchstaben als mögliche Antworten pro Frage. Es kann also sein, dass Antwort 1 den Buchstaben A, 2 B, 3 C und 4 D entspricht. Kann aber auch 1=N, 2=X, 3=A und 4=B sein.
Erstelle dir am besten ein Object, das du dann an einen Radiobutton binden kannst.
In dem Object, kannst du dann den Text speichern der angezeigt werden soll, und auch deinen Buchstaben, den du wieder auslesen möchtest.
Bei einem Postback musst du dann nur ermitteln, welcher der RadioButton markiert ist, und kannst leicht darüber dann wieder alles auslesen.
Wie kriege ich das so mit einem Benutzersteuerelement umgesetzt, dass ich nur mein Question-Objekt reingebe und ich bei einer Post-Back-Action für den Fragenblock (es können bis zu vier davon auf einer Seite sein) den gewählten Buchstaben bekomme?
Prinzipiell spielt es keine rolle, wieviele der UserControls auf einer Page sind. Jedes UserControl verarbeitet seinen bereich für sich ( PostBack ).
Du musst nur in der Page darüber die UserControls wieder auslesen. Auch die Page verarbeitet dabei einen PostBack selbst.
Hoffe das hilft ein bisschen weiter.
Grüße Stephan
Hallo Stipo!
Danke für deine Antwort.
Kannst du mir noch ein wenig bei der konkreten Umsetzung helfen? Wie könnte ich mein Object an den Radiobutton binden? Bei MVC 2 gibt es ja keine Code-Behinds mehr, wie kriege ich da die Logik unter? Ich will das eben nicht dann alles in der Action des Controls abhandeln sondern hätte gerne ein Control, das mir einfach den gewählten Buchstaben zurückliefert.
Hast du da eine Implementierungsidee?
Danke!
Viele Grüße
TopperDEL
Hi,
wenn Dir direkt am Controller das Objekt geben lässt ( was ja auch der Sinn von MVC ist ), dann hast Du durch den Radiobutton doch direkt in der jeweiligen Property den ausgewählten Buchstaben?!
Dazu muss ja nur der input-Name dem Property-Name entsprechen.
Bei MVC 2 gibt es ja keine Code-Behinds
Es gibt sie noch; man soll sie aber - wenn möglich - nicht nutzen.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Guck dir mal Rendern eines Formulars in ASP.NET-MVC mit HTML-Hilfsmethoden an. Da ist sogar ein Beispiel mit RadioButtons drin.
Du machst einfach eine View (z.B. Home/Index) mit
<% using(Html.BeginForm("Answer", "Home")) %>
<% { %>
<%= Html.RadioButton("answer", "A", false)%> Antwort A <br />
<%= Html.RadioButton("answer", "B", false)%> Antwort B <br />
<%= Html.RadioButton("answer", "C", false)%> Antwort C <br />
<%= Html.RadioButton("answer", "D", false)%> Antwort D <br />
<% } %>
und im zugehörigen Controller eine Action mit der folgenden Signatur:
public ActionResult Answer(string answer)
{
// ...
}
In answer
steht jetzt dann "A", "B", "C" oder "D" drin.
Gruß,
dN!3L
Danke für eure Antworten!
Ich krieg's aber immer noch nicht hin.
Steh ich wirklich so auf dem Schlauch?
Danke für eure Bereitschaft zu helfen!
Ok, jetzt klappt's!
Aus irgendeinem Grund habe ich keinen Submit-Button bekommen, sondern ein Eingabefeld. Ich weiß nicht mehr, was ich da anderes stehen hatte. Mit dem Submit-Button kriege ich den ausgewählten Wert gepostet.
Damit sollte dann klappen, was ich vorhabe.
Danke für eure Hilfe! Vielen Dank!
Hallo topperdel,
1.Steck alle Fragen in ein einziges Formular.
1.Sieh dir die Überladung LinkExtensions.ActionLink-Methode (HtmlHelper, String, String, Object) an. Dem letzte Parameter routeValues
vom Typ object
kannst du new { answer = "..." }
(vom Typ dynamic) zuweisen.
HTTP ist ein zustandsloses Protokoll. ASP.NET WebForms simuliert einen Zustand durch den ViewState.
ASP.NET MVC abstrahiert nicht so sehr, wie es WebForms tut. Für die Arbeit mit MVC wird kein ViewState benötigt (was nicht heiß, dass man ihn nicht verwenden kann).){gray}
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg