C# jQuery DateTimePicker:使用jQuery$.Post()将日期时间数据发布到MVC3操作中的ViewModel

C# jQuery DateTimePicker:使用jQuery$.Post()将日期时间数据发布到MVC3操作中的ViewModel,c#,jquery,asp.net-mvc-3,jquery-ui,datetimepicker,C#,Jquery,Asp.net Mvc 3,Jquery Ui,Datetimepicker,我正在尝试将使用jQuery DateTimePicker拾取的日期从输入字段发布到ViewModel中的DateTime属性。我一直在1/01/0001 0:00:00解析到它。 让我们看看我的viewmodel: public class GameViewModel { [Display(Name = "Home team")] public virtual String Home { get; set; } [Display(Name = "Away team")

我正在尝试将使用jQuery DateTimePicker拾取的日期从输入字段发布到ViewModel中的DateTime属性。我一直在1/01/0001 0:00:00解析到它。 让我们看看我的viewmodel:

public class GameViewModel
{
    [Display(Name = "Home team")]
    public virtual String Home { get; set; }

    [Display(Name = "Away team")]
    public virtual String Away { get; set; }

    [Display(Name = "Kickoff time")]
    [DataType(DataType.DateTime)]
    public virtual DateTime GameTime { get; set; }

    [Display(Name = "Standard sharing on?")]
    public virtual Boolean IsStandardSharing { get; set; }

    //Hidden
    public virtual Guid PeriodId { get; set; }

}
这是我的输入字段剃刀:

@Html.EditorFor(m => m.GameTime)
最后是我的JavaScript

$('#GameTime').datetimepicker({
    constrainInput: true,
    firstDay: 1,
    monthNames: ['Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', 'November', 'December'],
    monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec'],
    dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
    dayNamesMin: ['Zo', 'Ma', 'Di', 'Wo', 'Do', 'Vr', 'Za'],
    timeText: "Tijdstip",
    hourText: "Uur",
    minuteText: "Minuut",
    currentText: "Nu",
    closeText: "Klaar",
    stepMinute: 5,
    hour: 12

});

$('#btnAddGame').click(function () {
    var testPeriodId = "245f83a2-52b5-4a21-815e-a0b40020d7ff";
    var valDdlHome = $('#Home').val();
    var valDdlAway = $('#Away').val();
    var valTxtGameTime = Date($('#GameTime').val());

    var valRdnIsStandardSharing = $('#IsStandardSharing').val();
    var postUrl = "/period/saveperiodgame/";

    $.post(
        postUrl,
        { Home: valDdlHome, Away: valDdlAway, GameTime: valTxtGameTime, IsStandardSharing: valRdnIsStandardSharing, PeriodId: testPeriodId },
        function (data) {
            if (data.Status == 200) {
                console.log("Game added. Id:" + data.Data);
                if ($('#emptyText').length > 0) {
                    $('#emptyText').hide();
                }
                MijnProno.fn.BuildPeriodGameTableRow(valTxtGameTime, valDdlHome, valDdlAway, data.Data);
            } else if (data.Status == 500) {
                console.log("Failed to add game");
            } else {
                console.log("Fault with Javascript");
            }
        }, "json"
    );
});
整个下午我都在阅读和尝试答案,但没能成功(我总是等很长时间才问这样的问题,因为可能会有重复的问题)

在阅读了一些投票率很高的帖子后,我想我必须以/date(1224043200000)/格式发布我的日期,以便让我的ViewModel理解它。
是这样吗?如果是这样,如何将我的mm/dd/yyyy hh:ss格式转换为json?

要展开我的评论,请尝试以下操作:

$.post(
    postUrl,
    { Home: valDdlHome, Away: valDdlAway, GameTime: new Date(Date.parse(valTxtGameTime)), IsStandardSharing: valRdnIsStandardSharing, PeriodId: testPeriodId },
    function (data) {
        if (data.Status == 200) {
            console.log("Game added. Id:" + data.Data);
            if ($('#emptyText').length > 0) {
                $('#emptyText').hide();
            }
            MijnProno.fn.BuildPeriodGameTableRow(valTxtGameTime, valDdlHome, valDdlAway, data.Data);
        } else if (data.Status == 500) {
            console.log("Failed to add game");
        } else {
            console.log("Fault with Javascript");
        }
    }, "json"
);

您可以通过datepicker本身以不同的格式解析日期。e、 g

var valTxtGameTime =  $.datepicker.parseDate('dd/mm/yy', $('#GameTime').val()); 
是完整的参考


希望这对你有帮助

最后,我找到了解决这个问题的方法。 A驱使我找到了解决办法。 我想我一定试过各种方法来解析我的约会,除了这个

//JAVASCRIPT CODE
var valTxtGameTime = $('#GameTime').val();    
new Date(valTxtGameTime).toJSON()
查看我的HTTP帖子,日期现在发布为

2012-08-24T19:50:00.000Z

…并在我的ViewModel中正确接收。

不确定MVC,但ASMX将为您提供/Date(UNIXTIMESTAMP)/格式,但将在JSON请求中接受ISO8601,并将其正确解析为
DateTime
对象。我会
在AJAX请求中添加新日期(Date.parse(valTxtGameTime))
,看看会发生什么情况这只适用于该日期。jQuery datetimepicker是jQuery datepicker的扩展。自最新版本以来,他们还向其添加了一个.parseDateTime函数,试图现在就让它工作。好的,让parseDateTime函数工作。不幸的是,它与Date($'#GameTime').val()的作用相同。帖子内容:2012年8月23日星期四12:00:00 GMT+0200(浪漫夏令时),不是类似JSON的/Date(1224043200000)/
/Date(1224043200000)/
是基于Microsoft的Web服务(WCF、ASMX、MVC)唯一类似JSON的。也就是说,如果你能得到发送ISO8601格式日期(例如1994-11-05T08:15:30-05:00(from))的post请求,我仍然会在JSON-(反)序列化程序自动转换上投入资金,就像上面一样,新的日期(date.parse(valTxtGameTime)),给我2012年8月23日12:00:00 GMT+0200。我想这一定是(浏览器端)JSON样式编码和POST样式编码之间的异常。如果你想了解我的意思:在Chrome控制台中运行
JSON.stringify({myDate:new Date()})
,我很乐意,但是如果我在64位的bootcamp窗口上启动Chrome,我的mac会在几分钟后冻结。有史以来最糟糕的错误。;-)