MVC4 IEnumerable模型绑定始终为null

时间:2012-07-31 04:28:04

标签: asp.net asp.net-mvc jquery asp.net-mvc-4

使用下面的代码我的IEnumerable scheduledRooms到达控制器时总是有空值,它知道我发回了多少预订房间但是RoomID和NumRooms的值对于每个项目总是为空?

我有以下视图模型......

public class SelectDatesViewModel

    public int venueID { get; set; }
    public IEnumerable<BookedRoomViewModel> bookedRooms {get;set;}
    public string checkInDateString { get; set; }
    public int pageNo { get; set; }
    public bool showCheckIn { get; set;}
    public string startDateString { get; set; }
}
public class BookedRoomViewModel
{
    public string RoomID { get; set; }
    public string NumRooms { get; set; }
}

我正在使用以下jquery ajax调用..

function showArrivalCalendar() {
    showThrobber();
    var info = {
        venueID: venueID,
        bookedRooms: getBookedRooms(),
        startDateString: $("#calendarHolder").data("arrivalstartdate"),
        checkInDateString: "",
        pageNo: 1,
        showCheckIn: true
    }
    $.ajax({
        url: "/Booking/BookingCalendar/",
        type: "POST",
        data: JSON.stringify(info),
        dataType: "json",
        success: function (retValue) {
            $("#calendarHolder").html(data);
            hideThrobber();
        }
    });
}
function getBookedRooms() {
    var bookedRooms = [];
    $("#selectBookingType").find("select").each(function () {
         if ($(this).find(":selected").val() > 0) {
            var noRooms = $(this).find(":selected").val();
            bookedRooms.push({
                    RoomID: $(this).data("roomid"),
                    NumRooms: noRooms
            });
        };
    });
    return bookedRooms;
}

发布到此控制器..

[HttpPost]
public ActionResult BookingCalendar(SelectDatesViewModel model)
{
    return PartialView(GetBookingDates(model.venueID, model.startDateString, model.showCheckIn, model.pageNo, model.checkInDateString));
}

1 个答案:

答案 0 :(得分:2)

您的$.ajax来电选项错误:dataType用于指定您希望从服务器返回的数据类型,而不是您发送给服务器的数据类型。

如果要发送JSON数据并希望模型绑定器正常工作,则需要将contentType属性(请参阅JQuery doc)设置为"application/json"(您可能还需要{{} 1}}数据)

所以正确用法:

JSON.stringify