Frage

[I gelöst, diese selbst, meine Antwort für Ursache sehen]

Ich habe Probleme bekommen Form Wert für eine IList <> Argument in einer Controller-Methode richtig eingestellt.

Meine Controller-Klasse sieht wie folgt aus:

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;
}

Die leicht getrimmte Form:

<% 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++;
    }
} %>

Welche produziert Markup wie:

<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>

Ich habe die Form Werte geprüft, die eingereicht bekommen und sie sind richtig. Die richtige Anzahl von ShoppingBasketItems auch in Session["basket" gestellt bekommen], aber sowohl die ItemID und ItemQuantity von jeweils Null. Es scheint richtig Decodierung der Liste der Formularwerte zu sein, aber nicht die Eigenschaften selbst aufnimmt.

ich MVC RC2 bin mit, und auf der Basis eines Artikel von Scott Hanselman I ist ziemlich sicher, dass mein Code korrekt ist. Bin ich etwas fehlt?

War es hilfreich?

Lösung

Lösung

Nach dem MVC-Source-Download Ich konnte immer noch nicht, warum es nicht funktionieren würde, so vermutete ich es etwas sein muss mit der Art zu tun, binde ich versuchte zu. Sicher genug, als die Werte, die Mitglied Variablen, zu Eigenschaften gegenüber, war der Schuldige. Dies liegt daran, das Modell Binder Reflexion verwendet Eigenschaften festlegen, die es nicht durch den Aufruf von TypeDescriptor.GetProperties(Type) zu finden.

den Wert Klasse dieser Aktualisierung gelöst es (nach Stunden des Kopf Wand schlagen soll ich hinzufügen !!):

public class ShoppingBasketItem {
    public int ItemID { get; set; }
    public int ItemQuantity { get; set; }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top