Senden von Formularelementen mit demselben Namen

8

Ich habe ein Formular, das dem Benutzer erlaubt, zusätzliche "Zeilen" mit JQuery (mit .clone) zu erstellen, so dass sie entscheiden können, wie viele derselben Informationen sie einreichen müssen. Mein Problem ist, dass ich nicht herausfinden kann, wie ich auf diese Formularelemente in meinem Controller zugreifen kann.

Das Formular, das gesendet wird, kann wie folgt aussehen

%Vor%

Grundsätzlich kann der Block zwischen input und der Auswahl unendlich oft wiederholt werden. Wenn ich an den Controller sende, verwende ich FormCollection form , um auf die Formularelemente zuzugreifen. Von da an bin ich mir nicht sicher, wie ich auf die eingereichten Artikel zugreifen kann. Ich dachte daran, eine for-Schleife zu verwenden und dann über etwas wie form ["Amount"] [i] darauf zuzugreifen, aber das wird natürlich nicht funktionieren.

Tue ich das richtig und wenn ja, hat jemand irgendwelche Vorschläge, wie das funktionieren könnte?

Vielen Dank im Voraus.

    
dave 13.01.2009, 04:29
quelle

6 Antworten

1

Ich habe festgestellt, dass ( blush ) der Mechanismus, den JQuery verwendet, um die Zeichenkette innerhalb der geklonten Zeile (zu ersetzen) zu finden, im Grunde Regex ist. Also musste ich nur den eckigen Klammern und der Periode entkommen. Sobald ich das getan habe, konnte ich mit JQuery ein Formular erstellen, wie Phil Haacks Blog vorgeschlagen hat.

Zu meiner nächsten Ausgabe ...!

    
dave 16.01.2009, 00:39
quelle
12

Alte Frage, aber immer noch ... Sie können die gebuchten Werte als Array abrufen, indem Sie Request.Form.GetValues oder Request.QueryString.GetValues aufrufen. Zum Beispiel:

%Vor%

Und das Array amounts enthält die richtigen Werte, so dass Sie Werte, die comas, dots oder was auch immer enthalten, posten können und sich nicht darum kümmern müssen, es zu teilen / zu analysieren.

Natürlich, wenn Sie MVC ausführen, verwenden Sie den Modelbinder, um es zu tun. Sie können dies jedoch verwenden, wenn Sie Webformulare, einen generischen Handler usw. verwenden.

    
Akos Lukacs 28.06.2012 10:51
quelle
6

Sehen Sie sich Modellbindung an eine Liste an. Ihre Aktionsmethode sollte lauten:

%Vor%

Dies wird jedoch dazu führen, dass Sie die Elemente "verknüpfen" müssen. Alternativ erstellen Sie eine "Item" -Klasse:

%Vor%

Und

%Vor%

Und Ihr Markup sollte sein:

%Vor%

Etc ...

    
veggerby 13.01.2009 11:15
quelle
4

Ich glaube, wenn Sie mehrere Felder mit dem Namen Amount haben, werden die Werte durch Kommata getrennt.

Um auf jedes einzelne zuzugreifen, versuchen Sie es einfach:

%Vor%

Beachten Sie jedoch, dass die Eingaben beim Senden nicht bereinigt werden. Wenn also jemand ein Komma in das Textfeld eingibt, verursacht das Probleme.

Daher würde ich empfehlen, sie zu nummerieren.

    
Spencer Ruport 13.01.2009 04:34
quelle
0

Ich würde sie als Amount1, Amount2, Amount3 usw. bezeichnen.

    
Adam Pierce 13.01.2009 04:36
quelle
0

Sie können die ID und das Namensattribut der Eingabe in etwas wie "Betrag [1]", "Betrag [2]", "Betrag [3]" ändern (ja, das Attribut id und name kann das Besondere enthalten) Zeichen "[" oder "]"). Schreiben Sie dann im Controller einen HTTP-Anfrageparameter-Parser, um die Beträge als Sammlungen zurückzuerhalten.

    
jscoot 13.01.2009 04:37
quelle

Tags und Links