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.
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 ...!
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:
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.
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 ...
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.
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.
Tags und Links asp.net-mvc