从视图返回到控制器的错误日期

时间:2016-11-25 06:06:50

标签: c# asp.net asp.net-mvc datetime

我有一个自定义日期选择器,使用户可以从淹没中选择日期并将其显示在视图的文本框中。这里使用的格式是'mm / dd / yy'。

当用户提交请求时,我通过AJAX帖子将其传递给控制器​​。这里的值来自文本框 txtStartTimetxtEndTime。 [例如:如果用户选择2016年11月1日,则显示为11/01/16]

function SubmitData() { 
    var obj = { TaskId: ccount, TrajName: $('#drpTraj').find(":selected").text(), StartTime: $('#txtStartTime').val(), EndTime: $('#txtEndTime').val(), Aggr: $('#drpAggr').find(":selected").text() }

    var jobvm = {}
    jobvm["data"] = obj;
    $.ajax({
        type: "POST",
        url: "/Data/SubmitData",
        data: JSON.stringify({ dataObj: jobvm }),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: true,
        success: function (msg) {
            ServiceSucceeded(msg);
        },
        error: function () {
            return "error";
        }
    });
}

数据类代码:

public int TaskId { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public string Aggr { get; set; }
public string TrajName { get; set;}

我的问题是,当我选择November 1,2016之类的日期时,它会显示在视图中并作为11/01/16传递。但一旦它到达控制器, 日期显示为11 Jan 2016,而不是01 Nov 2016

我尝试了this post中建议的解决方案,如下面的代码:

var dateString = dataObj.StartTime;
var format = "MM/dd/yyyy";
var date = DateTime.ParseExact(dateString, format, CultureInfo.InvariantCulture);

但它没有正确返回日期,因为控制器中收到的数据已经是2016年1月11日。 甚至我试过dataObj.StartTime.ToString("MM-dd-yy")。但一切都在1月11日回归。 请帮我找到解决方案。

1 个答案:

答案 0 :(得分:0)

如何以ISO格式从客户端发送日期以避免服务器猜测日期格式?

var startTimeInClientCulture = '11/01/16'; //$('#txtStartTime').val();
var startTimeInIso = new Date(startTimeInClientCulture);
startTimeInIso.setTime( startTimeInIso.getTime() - startTimeInIso.getTimezoneOffset()*60*1000 );
//use startTimeInIso.toISOString() if you need a string instead of a Date type
//and send this in the ajax call