2012-04-06 4 views
2

Im unteren Link gibt es eine Schaltfläche zum Hinzufügen, mit der Sie mehrere Textfelder hinzufügen können, die ich in meiner Anwendung verwende.Wie binden mehrere Textbox mit ViewModel Array-Zeichenfolge-Eigenschaft?

http://jsfiddle.net/cN5SR/200/

Jetzt möchte ich wissen, wie kann ich das Array von String-Wert mit meinem Viewmodel binden.

lassen Sie uns sagen, wenn mein Eigentum in Ansichtsmodell als unten:

Public class MyViewmodel 
{ 
    Public string[] players { get; set; } 
} 
+1

Wenn alle Textfelder "Player" genannt werden, fügt der ModelBinder jedem Textfeld den Wert des Arrays hinzu. Die andere Möglichkeit besteht darin, jedes Textfeld mit einem Index zu benennen: players [0], players [1] usw., aber dann müssen Sie die Indizes verwalten und NICHT einen überspringen. –

+0

Meinen Sie, dass es die Array-Zeichenkette standardmäßig erzeugt? – updev

+0

Wenn jedes Textfeld den gleichen Namen hat, posieren Sie im Grunde "player = player1 & player = player2 & player = player3", was dazu führt, dass das Array automatisch vom ModelBinder –

Antwort

0

Steven Sanderson schrieb eine very nice blog post genau zu diesem Thema.

+0

erstellt wird. Diese Antwort ist älter als ein Jahr und der Link Es ist hilfreich, wenn Sie die wesentlichen Teile der Antwort hier auf dieser Website posten oder Ihr Beitrag möglicherweise gelöscht wird [Siehe die FAQ, in der Antworten erwähnt werden, die "kaum mehr als ein Link" sind.] (http://stackoverflow.com/faq#deletion) Sie können den Link immer noch einfügen, wenn Sie möchten, aber nur als 'Referenz'. Die Antwort sollte eigenständig stehen, ohne die Verbindung zu benötigen. – Taryn

1

Wenn ich es statisch täte, würde ich es getan haben, wie Razor-Syntax folgt verwendet.

@for(int i = 0; i < Model.players.Length; i++) 
{ 
    @Html.EditorFor(m => m.players[i]); 
} 

Diese im folgenden Markup-Ergebnisse:

<input class="text-box single-line" id="players_0_" name="players[0]" type="text" value="Bob" /> 
<input class="text-box single-line" id="players_1_" name="players[1]" type="text" value="Sam" /> 

Also, wenn Sie zwei Eingänge javascript verwenden, die wie folgt aussieht und per Post an Ihren Controller, wird die Standard-Bindemittel ein Spieler Array mit 4 erstellen Artikel. Ich hoffe, du siehst das Geplapper.

<input class="text-box single-line" id="players_2_" name="players[2]" type="text" value="Pete" /> 
<input class="text-box single-line" id="players_3_" name="players[3]" type="text" value="Dirk" /> 

Es gibt einige Herausforderungen. Ich habe das schon einmal gemacht und hatte ein paar Probleme mit Löschungen. Ich kann mich nicht an die genauen Probleme erinnern und was ich getan habe, um es an diesem Punkt zu beheben.

Verwandte Themen