Frage

Ich versuche einen Beitrag zu erstellen, der die Standardmodellbinder -Funktionalität in ASP.NET MVC 2 verwenden sollte, aber leider kann ich nicht durchkommen ...

Wenn ich auf die Schaltfläche Checkout klicke, fülle ich ein Formular dinamisch mit JQuery -Code und übermittele dieses Formular an den Server. Dies ist das Formular, das eingereicht wird

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

Dies ist der JQuery -Code, der das Sendenereignis für das Formular verarbeitet

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

Dies ist die Controller -Aktion, die aufgerufen werden sollte

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

Und schließlich ist dies die beteiligte Kartmodelklasse

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

Der Standardmodellbinder bin jedoch nicht die Webformdaten an eine Cartmodel -Klasse. Mit Fiddler konnte ich feststellen, dass die an den Server gesendeten Daten korrekt sind, wie Sie aus dem folgenden Snapshot sehen können

alt text

Irgendein Vorschlag?

War es hilfreich?

Lösung

Nach @Artem K. Kommentar sieht der Code gut aus.

Bitte überprüfen Sie, ob die Basemodel -Klasse verhindert wird, dass das Objekt gebannt wird. Überprüfen Sie auch, ob Sie keinen Filter haben, der die ausgeführte Anfrage verhindert (wie Autorize usw.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top