Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
ASP.Net MVC2 Kompliziertes UserControl
topperdel
myCSharp.de - Member



Dabei seit:
Beiträge: 67

Themenstarter:

ASP.Net MVC2 Kompliziertes UserControl

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Stipo
myCSharp.de - Member

Avatar #avatar-2966.gif


Dabei seit:
Beiträge: 704
Herkunft: Lörrach

beantworten | zitieren | melden

Hallo,

ich versuche mal deine fragen zu beantworten, sofern ich das richtig verstanden habe was Du umsetzen möchtest.
Zitat
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.
Zitat
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
private Nachricht | Beiträge des Benutzers
topperdel
myCSharp.de - Member



Dabei seit:
Beiträge: 67

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15944

beantworten | zitieren | melden

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.
Zitat
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 - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
dN!3L
myCSharp.de - Experte

Avatar #avatar-2985.png


Dabei seit:
Beiträge: 3138

beantworten | zitieren | melden

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
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von dN!3L am .
private Nachricht | Beiträge des Benutzers
topperdel
myCSharp.de - Member



Dabei seit:
Beiträge: 67

Themenstarter:

beantworten | zitieren | melden

Danke für eure Antworten!

Ich krieg's aber immer noch nicht hin.
1. Problem: Kann ich mehrere BeginForms in einer Seite haben? Oder müsste ich dann alle vier Fragenblöcke in eine Form packen (wäre ja kein Problem).
2. Problem - das richtige: wie kriege ich den Wert "gepost-backed"? Ich navigiere mit ActionLinks zwischen den Views, aber da bekomme ich den answer-Parameter nicht gefüllt, der ist immer null.

Steh ich wirklich so auf dem Schlauch?

Danke für eure Bereitschaft zu helfen!
private Nachricht | Beiträge des Benutzers
topperdel
myCSharp.de - Member



Dabei seit:
Beiträge: 67

Themenstarter:

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
m0rius
myCSharp.de - Member

Avatar #avatar-3125.png


Dabei seit:
Beiträge: 1043

beantworten | zitieren | melden

Hallo topperdel,
  1. Steck alle Fragen in ein einziges Formular.
  2. 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).


m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
private Nachricht | Beiträge des Benutzers