当我更改 CultureInfo 时从视图到控制器获取空日期时间值
Getting null datetime value from view to controller when i change CultureInfo
net mvc,我有一个控制器,它使用 jquery datepicker 从视图中获取日期时间参数,然后我通过
使用 json 给控制器的值,
一切正常,除了我将语言 cultureInfo 更改为德语时,datetime 参数的值始终为 null。
这是控制器:
public JsonResult GetDetails(DateTime? from, DateTime? to)
{
//Do something..
}
型号:
public class UsagesModel
{
public DateTime From
{
get;
set;
}
public DateTime To
{
get;
set;
}
}
选择数据然后传递给控制器的视图:
<input type="text" id="from" value="@Model.From.ToString("dd/MM/yyyy")" class="datepicker" />
<input type="text" id="to" value="@Model.To.ToString("dd/MM/yyyy")" class="datepicker" />
$("#filter").click(function (e) {
fromdate = $("#from").val();
todate = $("#to").val();
$.getJSON('@Response.ApplyAppPathModifier(@Url.Action("GetDetails"))', {
'from': StringToJSONDate(fromdate),
'to': StringToJSONDate(todate)
}, function (groupusages) {
.....Do Something....
}).error(function (xhr, textStatus, errorThrown) {
//document.location.href = "/Login";
});
});
//function for parsing data to json
function StringToJSONDate(stringDate) {
var dateParts = stringDate.split("/");
var date = new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]);
return date.toJSON();
}
我能做什么,问题出在哪里,因为它在英语和法语文化中运行良好。请帮助我!
我不知道确切的变化,但这可能是因为德国使用的 date/time 格式与英语和法语地区使用的格式不同。我会尝试添加来自 javascript 的一些警报,以在不同的点上查看您在那里有一个值,然后查看它在哪里变得古怪。我怀疑该值仍然存在但对日期格式不满意,应该通过一些 .split("/") 和 .join("/") 函数调用和寻址数组的索引来快速修复
你可以做的一件事是改变你的方法签名来做这样的事情。您可能会花费大量时间为您的 mvc 应用程序获取适合不同文化的正确格式。
public JsonResult GetDetails(string from, string to)
{
var fromDate = DateTime.Parse(from);
var toDate = DateTime.Parse(to);
//Do something..
}
正如 Khan 在他的评论中提到的,您可以将其设为 DateTime.ParseExact()
,这样您就不会 运行 陷入其他文化问题。
https://msdn.microsoft.com/en-us/library/System.DateTime.ParseExact(v=vs.110).aspx
net mvc,我有一个控制器,它使用 jquery datepicker 从视图中获取日期时间参数,然后我通过 使用 json 给控制器的值, 一切正常,除了我将语言 cultureInfo 更改为德语时,datetime 参数的值始终为 null。
这是控制器:
public JsonResult GetDetails(DateTime? from, DateTime? to)
{
//Do something..
}
型号:
public class UsagesModel
{
public DateTime From
{
get;
set;
}
public DateTime To
{
get;
set;
}
}
选择数据然后传递给控制器的视图:
<input type="text" id="from" value="@Model.From.ToString("dd/MM/yyyy")" class="datepicker" />
<input type="text" id="to" value="@Model.To.ToString("dd/MM/yyyy")" class="datepicker" />
$("#filter").click(function (e) {
fromdate = $("#from").val();
todate = $("#to").val();
$.getJSON('@Response.ApplyAppPathModifier(@Url.Action("GetDetails"))', {
'from': StringToJSONDate(fromdate),
'to': StringToJSONDate(todate)
}, function (groupusages) {
.....Do Something....
}).error(function (xhr, textStatus, errorThrown) {
//document.location.href = "/Login";
});
});
//function for parsing data to json
function StringToJSONDate(stringDate) {
var dateParts = stringDate.split("/");
var date = new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]);
return date.toJSON();
}
我能做什么,问题出在哪里,因为它在英语和法语文化中运行良好。请帮助我!
我不知道确切的变化,但这可能是因为德国使用的 date/time 格式与英语和法语地区使用的格式不同。我会尝试添加来自 javascript 的一些警报,以在不同的点上查看您在那里有一个值,然后查看它在哪里变得古怪。我怀疑该值仍然存在但对日期格式不满意,应该通过一些 .split("/") 和 .join("/") 函数调用和寻址数组的索引来快速修复
你可以做的一件事是改变你的方法签名来做这样的事情。您可能会花费大量时间为您的 mvc 应用程序获取适合不同文化的正确格式。
public JsonResult GetDetails(string from, string to)
{
var fromDate = DateTime.Parse(from);
var toDate = DateTime.Parse(to);
//Do something..
}
正如 Khan 在他的评论中提到的,您可以将其设为 DateTime.ParseExact()
,这样您就不会 运行 陷入其他文化问题。
https://msdn.microsoft.com/en-us/library/System.DateTime.ParseExact(v=vs.110).aspx