Domanda

[Ho risolto questo problema da solo, vedi la mia risposta per causa]

Ho difficoltà a ottenere i valori del modulo per un IList < > argomento in un metodo controller impostato correttamente.

La mia classe di controller ha questo aspetto:

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

La forma leggermente ritagliata:

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

Che produce markup come:

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

Ho verificato i valori del modulo che vengono inviati e sono corretti. Anche il numero corretto di ShoppingBasketItem viene inserito in Session [" basket " ], tuttavia sia ItemID che ItemQuantity di ciascuno è zero. Sembra che stia decodificando correttamente l'elenco dei valori del modulo, ma non raccogliendo le proprietà stesse.

Sto utilizzando MVC RC2 e basato su un di Scott Hanselman I sono abbastanza sicuro che il mio codice sia corretto. Mi sto perdendo qualcosa?

È stato utile?

Soluzione

Soluzione

Dopo aver scaricato la fonte MVC non riuscivo ancora a capire perché non avrebbe funzionato, quindi ho pensato che dovesse avere a che fare con il tipo che stavo tentando di associare. Abbastanza sicuro, i valori essendo variabili membro, al contrario di proprietà, era il colpevole. Questo perché il raccoglitore modello utilizza la riflessione per impostare le proprietà, che non ha trovato attraverso la chiamata a TypeDescriptor.GetProperties (Type) .

L'aggiornamento della classe di valore a questo ha risolto (dopo ore di colpire la testa fuori dal muro dovrei aggiungere !!):

public class ShoppingBasketItem {
    public int ItemID { get; set; }
    public int ItemQuantity { get; set; }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top