0

ich eine einfache EditorTemplate für eine Liste in meinem Modell gemacht haben (Views/Shared/EditorTemplates/List.cshtml):Mvc EditorTemplate für List <string> mit dynamischer Menge

@model List<string> 
foreach (var str in Model) 
{ 
    <li> 
     @Html.LabelFor(m => str, "My Label") 
     @Html.TextBoxFor(m => str) 
     @Html.ValidationMessageFor(m => str) 
    </li> 
} 

wie folgt aufgerufen meiner Meinung nach (Ansichten/Profile.cshtml):

@using (Html.BeginRouteForm(MvcSettings.SitecoreRouteName, FormMethod.Post, new { data_abide = "true", id = "myForm", enctype = "multipart/form-data" })) 
{ 
    @Html.Sitecore().FormHandler("User", "UpdateProfile") 
    @Html.ValidationSummary() 

    @Html.EditorFor(x => x.ListTest, new { htmlAttributes = new { id = "listTestId" } }) 

    <input type="submit" value="Submit" /> 
} 

kontrollierte Aktion:

public ActionResult UpdateProfile(IntranetContactViewModel formModel) 
{ 
    // Save information to DB 
} 

Modell:

public class IntranetContactViewModel 
{ 
    public List<string> ListTest { get; set; } 

    public IntranetContactViewModel() 
    { 
     ListTest = new List<string>{"abc","def","ghi"}; 
    } 
} 

Wenn die Liste 3 Strings enthält dann wird die Ansicht me 3 Text-Boxen machen.

<input class="text-box single-line" id="listTestId" name="ListTest[0]" type="text" value="abc"> 
<input class="text-box single-line" id="listTestId" name="ListTest[1]" type="text" value="def"> 
<input class="text-box single-line" id="listTestId" name="ListTest[2]" type="text" value="ghi"> 

Aber die Anzahl der Optionen, die der Benutzer einfügen kann, sollte unbegrenzt sein. Wenn alle 3 Textfelder gefüllt sind, sollte ein 4. erscheinen (und idealerweise, wenn mehr als 2 Textfelder leer sind, sollte 1 gelöscht werden).

Ich habe versucht, dies selbst zu tun, indem ein Textfeld mit der gleichen Signatur hinzugefügt (addiert 1 zu dem Zähler innerhalb des Namensattribut)

<input class="text-box single-line" id="listTestId" name="ListTest[3]" type="text" value="TEST"> 

Aber wenn ich diese einreichen, bedeutet dies nicht durch anerkannt bekommen das Modell und wird nicht an den Controller zurückgegeben. Gibt es eine Möglichkeit, mein Model wissen zu lassen, dass es jetzt auch diese neue Textbox im Auge behalten muss? Oder ist das einfach nicht möglich?

Bitte beraten.

+0

Können wir etwas mehr Code - Formular - Definition und Controller - Funktion sehen, die es empfängt? Haben Sie auch überprüft, dass es definitiv zurückgesendet wird, indem Sie den Inhalt des POST überprüfen, den der Browser sendet? – wizzardmr42

+0

Das Modell könnte auch nützlich sein, dann – wizzardmr42

+0

Edits wurden gemacht. Es sieht so aus, als ob der Browser das neue Feld übernommen und dem POST hinzugefügt hat. – Timon

Antwort

0
@Html.EditorFor(x => x.ListTest, new { htmlAttributes = new { id = "listTestId" } }) 

Sollte gewesen:

@Html.EditorFor(x => x.ListTest) 

ich alle meine Text-Boxen gezwungen, die gleiche ID zu bekommen, und das das System vermasselt. Danke an alle in den Kommentaren für die Hilfe!

Verwandte Themen