8 votes

ASP.NET MVC Model list binding

Voici mon modèle :

public class Items
    {
        public string Foo { get; set; }
        public string Bar { get; set; }
    }

Contrôleur :

public ActionResult Index()
    {
        var model = new List<Items>
                        {
                            new Items
                                {
                                    Foo = "foo",
                                    Bar = "bar"
                                },
                            new Items
                                {
                                    Foo = "ai",
                                    Bar = "ia"
                                },
                            new Items
                                {
                                    Foo = "one",
                                    Bar = "two"
                                }
                        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(List<Items> model)
    {
        return View(model);
    }

Vue (Index) :

@using (Html.BeginForm())
{
    for (int i = 0; i < Model.Count; i++)
    {
        <div onclick="$(this).remove();">
            @Html.TextBoxFor(model => model[i].Foo) <br/>
            @Html.TextBoxFor(model => model[i].Bar)
        </div>
    }
    <div>
        <input type="submit"/>
    </div>
}

Je supprime la deuxième paire :

    <div onclick="$(this).remove();">
        <input name="[0].Foo" type="text" value="foo"> <br>
        <input name="[0].Bar" type="text" value="bar">
    </div>

    <div onclick="$(this).remove();">
        <input name="[2].Foo" type="text" value="one"> <br>
        <input name="[2].Bar" type="text" value="two">
    </div>

Lors de l'affichage, je n'obtiens que la première paire ("foo" et "bar"). C'est parce que la troisième paire a l'index "2". Je veux obtenir les deux paires (je n'utilise pas FormCollection, je veux qu'il se lie automatiquement). En réalité, j'ai beaucoup d'autres entrées sur le formulaire, donc je ne veux pas recharger et rattacher les index à chaque entrée. Je ne veux donc pas recharger et rattacher les index à chaque entrée. Pouvez-vous m'aider ?

4voto

Amit Prajapati Points 336

Cela peut vous être utile....

doit placer un champ caché sur chaque article...

MVC3 Indices non séquentiels et DefaultModelBinder

3voto

karaxuna Points 11303

J'ai trouvé la solution grâce à Amit Prajapati :

@using (Html.BeginForm())
{
    for (int i = 0; i < Model.Count; i++)
    {
        var identifier = Guid.NewGuid();
        <div onclick="$(this).remove();">
            @Html.Hidden("Index", identifier)
            @Html.TextBox("[" + identifier + "].Foo")
            <br/>
            @Html.TextBox("[" + identifier + "].Bar")
        </div>
    }
    <div>
        <input type="submit" />
    </div>
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X