asp.net - MVC4 IEnumerable 模型绑定(bind)始终为 null

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

使用下面的代码,我的 IEnumerable bookingRooms 在到达 Controller 时始终具有空值,它知道我发回了多少个 bookingRooms,但对于每个项目,RoomID 和 NumRooms 的值始终为空,有什么想法吗?

我有以下 View 模型...

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

发布到此 Controller ..

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

最佳答案

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

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

正确的用法是:

$.ajax({
    url: "/Booking/BookingCalendar/",
    type: "POST",
    data: JSON.stringify(info),
    contentType: "application/json",
    success: function (retValue) {
        $("#calendarHolder").html(data);
        hideThrobber();
    }
});

关于asp.net - MVC4 IEnumerable 模型绑定(bind)始终为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11733099/

相关文章:

asp.net - 内容占位符 : Repeated Content

C# - 组合学

c# - 如何生成唯一的 12 位字母数字 key 以用于 URL

.net - Wcf、ASP.NET MVC 组合?我真的需要它吗?

javascript - 将 razor enumdropdownlistfor 转换为 Bootstrap 按钮组下拉列表

javascript - 如何从javascript返回多个值到jsp

asp.net - 对预编译网站进行更改

c# - ASP.NET 向导获取文本框的值

c# - 如何在 Asp.Net mvc 5 的 grid.mvc 中添加两个按钮

jquery - 如何将 ul 转换为选项