ASP.NET la liaison de modèle MVC IList<> paramètre

[J'ai résolu ce problème moi-même, voir ma réponse pour cause]

Je vais avoir de la difficulté à obtenir les valeurs d'un formulaire pour une IList<> argument à une méthode de contrôleur correctement réglé.

Mon contrôleur de classe ressemble à ceci:

public class ShoppingBasketController : Controller {

    public ActionResult Index() {
        return View();
    }

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Add(IList<ShoppingBasketItem> items) {
        Session["basket"] = items; //for testing
        return RedirectToAction("Index");
    }
}
public class ShoppingBasketItem {
     public int ItemID;
     public int ItemQuantity;
}

Légèrement rogné forme:

<% using (Html.BeginForm("Add", "ShoppingBasket")) { %>
    <% int codeIndex = 0;
    foreach (Product product in products) { %>
        <%= Html.Hidden("items[" + codeIndex + "].ItemID", product.Id) %>
        <%= Html.TextBox("items[" + codeIndex + "].ItemQuantity", "0", new { size = "2"}) %>
        <% codeIndex++;
    }
} %>

Qui produit de la majoration comme:

<form action="/Basket/Add" method="post">
    <input id="items[0]_ItemID" name="items[0].ItemID" type="hidden" value="1" />
    <input id="items[0]_ItemQuantity" name="items[0].ItemQuantity" size="2" type="text" value="0" />

    <input id="items[1]_ItemID" name="items[1].ItemID" type="hidden" value="2" />
    <input id="items[1]_ItemQuantity" name="items[2].ItemQuantity" size="2" type="text" value="0" />

    <input id="items[2]_ItemID" name="items[2].ItemID" type="hidden" value="3" />
    <input id="items[2]_ItemQuantity" name="items[2].ItemQuantity" size="2" type="text" value="0" />
</form>

J'ai vérifié la forme des valeurs qui sont soumis et qu'ils sont corrects. Le nombre exact de ShoppingBasketItems aussi se mettre en Session["basket"], toutefois, la ItemID et ItemQuantity de chacun sont égaux à zéro. Il semble être correctement décodage de la liste de valeurs d'un formulaire, mais pas de ramasser les propriétés elles-mêmes.

Je suis en utilisant MVC RC2, et basé sur un l'article de Scott, Hanselman je suis sûr que mon code est correct. Ai-je raté quelque chose?

  • Est-il un moyen de faire ce travail avec les modèles d'INTERFACE utilisateur, à l'aide d'un EditorFor(m => m.produit) pour chaque itération de Produits?
  • Merci. J'ai trouvé cela vraiment utile. 🙂
InformationsquelleAutor roryf | 2009-03-17