Связыватель модели по умолчанию не связывает класс моей модели - PullRequest
2 голосов
/ 28 декабря 2010

Я пытаюсь сделать сообщение, которое должно использовать функциональность связующего устройства модели по умолчанию в ASP.NET MVC 2, но, к сожалению, я не могу дозвониться ....

Когда я нажимаю кнопку «Оформить заказ», я динамически заполняю форму, используя код jQuery, а затем отправляю эту форму на сервер. Это форма для отправки

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

Это код jQuery, который обрабатывает событие отправки для формы

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

Это действие контроллера, которое должно быть вызвано

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

И, наконец, задействован класс CartModel

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

Но связыватель моделей по умолчанию не связывает данные веб-формы с классом CartModel. Используя Fiddler, я смог убедиться, что данные, отправленные на сервер, верны, как вы можете видеть из следующего снимка

alt text

Есть предложения?

1 Ответ

3 голосов
/ 28 декабря 2010

После комментария @Artem K. код выглядит хорошо.

Убедитесь, что класс BaseModel предотвращает привязку объекта.Также убедитесь, что у вас нет фильтра, препятствующего выполнению запроса (например, Авторизация и т. Д.)

...