【发布时间】:2016-11-25 06:06:50
【问题描述】:
我有一个自定义日期选择器,它使用户能够从下拉菜单中选择日期并将其显示在视图的文本框中。这里使用的格式是'mm/dd/yy'。
当用户提交请求时,我通过 AJAX 帖子将其传递给控制器。这里的值是从文本框中获取的
txtStartTime 和 txtEndTime。 [例如:如果用户选择 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 日回归。
请帮我找到解决方案。
【问题讨论】:
-
这意味着您服务器上的文化是接受
dd/MM/yyyy中的日期的文化 - 要么更改文化,要么使用自定义 ModelBinder -
我建议使用当前文化设置日期,或者通过在当前线程上设置所需的文化。通过这种方式,您不必转换日期格式。
-
@StephenMuecke:我已经收到
11 January 2016。所以如果我改变文化,它会变成01 November 2016吗?请问什么是modelbinder? -
@DirtyDeveloper :你的意思是在这一点上改变文化
var date = DateTime.ParseExact(dateString, format, CultureInfo.InvariantCulture);吗? -
我认为这行不通。尝试设置日期时间文本框的页面加载。只是为了尝试!并在保存到数据库之前将其转换为您需要的任何格式
标签: c# asp.net asp.net-mvc datetime