Mon viewmodel contient une liste de chaînes:
public class SupplierViewModel { public Supplier Supplier { get; set; } public List Numbers; }
L’utilisateur peut append un nombre quelconque de chaînes dans la vue:
@Html.LabelFor(model => model.Numbers) @for (int i = 0; i < Model.Numbers.Count; i++) { @Html.TextBoxFor(m => m.Numbers[i]) }
Cela se fait côté client avec jquery:
var container = $('#allNumbers'); $('#addNumber').click(function () { var index = container.children().length; var clone = $('#newNumber').clone(); clone.html($(clone).html().replace(/\[#\]/g, '[' + index + ']')); container.append(clone.html()); });
Mon problème est qu’aucune des chaînes ajoutées dynamicment n’est renvoyée au contrôleur, même si elles s’appellent toutes “Numbers [i]”. Qu’est-ce que j’oublie ici?
Numbers
est un champ et le DefaultModelBinder
ne peut pas définir la valeur d’un champ. Vous devez en faire une propriété en ajoutant des getters / setters
public List Numbers { get; set; }