Question

Je suis en train de faire un post qui devrait utiliser le modèle par défaut fonctionnalité dans ASP.NET MVC Binder 2, mais malheureusement je ne peux pas passer ....

Lorsque je clique sur le bouton de commande I remplir un formulaire dinamically en utilisant le code jQuery et ensuite soumettre ce formulaire au serveur. Ceci est la forme qui se soumis

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

Ceci est le code de jQuery qui manient la soumettre un événement pour la forme

$("#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();
        }
    });
});

Ceci est l'action du contrôleur qui devrait être obtenir appelé

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

Et enfin c'est la classe CartModel impliqués

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

Mais la valeur par défaut Modèle Binder ne se lie pas les données de formulaire Web à une classe de CartModel. En utilisant Fiddler j'ai pu voir que les données envoyées au serveur est correcte comme vous pouvez le voir sur le cliché suivant

text alt

Toute suggestion?

Était-ce utile?

La solution

Après @Artem commentaire K., le code semble bon.

S'il vous plaît vérifier si la classe BaseModel empêche l'objet binded. Vérifiez également que vous n'avez un filtre empêchant la demande en cours d'exécution (comme Autorisez, etc.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top