Domanda

Sto cercando di fare un post che dovrebbe utilizzare la funzionalità di default modello Binder in ASP.NET MVC 2, ma purtroppo non si può ottenere attraverso ....

Quando clicco sul pulsante di checkout Io popolo una forma dinamicamente utilizzando il codice jQuery e poi inviare il modulo al server. Questa è la forma che vengono presentate

<form action="/x/Order/Checkout" id="cartForm" method="post">
    <input name="__RequestVerificationToken" type="hidden" value="UDjN9RdWheKyWK5Q71MvXAbbDNel6buJd5Pamp/jx39InuyYIQVptcEubIA2W8DMUzWwnZjSGkLspkmDPbsIxy8EVuLvfCSZJJnl/NrooreouptwM/PaBEz2v6ZjO3I26IKRGZPqLxGGfITYqlf8Ow==">
    <input id="CustomerID" name="CustomerID" type="hidden" value="1">
    <input id="FirmID" name="FirmID" type="hidden" value="2">
    <input type="hidden" name="CartItems[0].ServiceTypeID" value="1">
    <input type="hidden" name="CartItems[0].Quantity" value="1">
    <input type="hidden" name="CartItems[1].ServiceTypeID" value="2">
    <input type="hidden" name="CartItems[1].Quantity" value="1">
</form>

Questo è il codice jQuery che gestire l'evento presentare per il modulo

$("#cartForm").submit(function (event) {
    event.preventDefault();
    var form = $("#cartForm");
    var panel = form.parent();
    panel.parent().block();
    $.ajax({
        type: "post",
        dataType: "html",
        url: '<%: Url.Content("~/Order/Checkout") %>',
        async: false,
        data: form.serialize(),
        success: function (response, status, xml) {
            panel.parent().unblock();
        },
        error: function (response) {
            panel.parent().unblock();
        }
    });
});

Questa è l'azione di controllo che dovrebbe essere ottenere chiamato

[HttpPost]
[ValidateAntiForgeryToken]
public virtual ActionResult Checkout( CartModel cart ) {
}

E infine questa è la classe CartModel coinvolti

public class CartModel : BaseModel
{
    public int CustomerID { get; set; }
    public int FirmID { get; set; }

    public List<CartItemModel> CartItems { get; set; }

    public CartModel() {
        CartItems = new List<CartItemModel>();
    }
}

public class CartItemModel : BaseModel
{
    public int ServiceTypeID { get; set; }
    public int Quantity { get; set; }
}

Ma il default modello Binder non associa i dati del modulo web a una classe CartModel. Utilizzando Fiddler ho potuto vedere che i dati inviati al server è corretto, come si può vedere dalla seguente snapshot

alt text

Ogni suggerimento?

È stato utile?

Soluzione

A seguito @Artem K. commento, il codice sembra buono.

Si prega di verificare se la classe BaseModel impedisce l'oggetto che viene rilegato. Verificare inoltre che tu non abbia alcuna filtro impedendo la richiesta in corso di esecuzione (come Autorizza, ecc.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top