Standardmodellbinder bindet meine Modellklasse nicht
-
13-10-2019 - |
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
Irgendein Vorschlag?
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.)