C# jQuery DateTimePicker:使用jQuery$.Post()将日期时间数据发布到MVC3操作中的ViewModel
我正在尝试将使用jQuery DateTimePicker拾取的日期从输入字段发布到ViewModel中的DateTime属性。我一直在1/01/0001 0:00:00解析到它。 让我们看看我的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")
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会在几分钟后冻结。有史以来最糟糕的错误。;-)