我有一个向c#controller发送步骤的函数。
$scope.saveProgress = function () {
var step6 = {
Id: $scope.stepId,
ProblemId: $scope.problemId,
WhenOptions: $scope.whenOptions,
CounterMeasures: $scope.counterMeasures,
CounterMeasureWhens: $scope.counterMeasureWhens,
CompletedDate: $scope.CompletedDate
// step 6 specific data
};
$http.post(ROOT + '/step/SaveA3Step6/', step6)
.success(function (result) {
// log to console?
}).
error(function (data, status, headers, config) {
// log to console?
});
};
一切都很好但日期总是在我的c#controller中以null结尾。
public JsonResult SaveA3Step6(A3Step6 a3Step6)
{
try
{
a3Step6.Save();
return Json("OK", JsonRequestBehavior.AllowGet);
}
catch (Exception e)
{
return Json("Error" + e.Message);
}
}
调试时,我发现$scope.CompletedDate
的格式为"/Date(1426636800000)/"
。
因为我在c#中的A3Step6对象期望日期时间显示为空。
在将$scope.CompletedDate
函数发送回我的c#控制器之前,有没有办法将$scope.saveProgress
转换为{{1}}函数中的日期时间?
答案 0 :(得分:0)
您可以使用DateTime.ParseExact指定解析日期所需的格式。
例如,如果在JS中具有以下格式的日期时间:
var d = Date(2015,3,18,11,22,25,0)
'Wed Mar 18 2015 11:28:35 GMT+0200'
您可以使用以下命令在C#中解析它:
DateTime dt = DateTime.ParseExact(a3Step6,
"ddd MMM d yyyy HH:mm:ss GMTzzzzz",
CultureInfo.InvariantCulture);
答案 1 :(得分:0)
您可以重复使用Angularjs的日期过滤器。你必须在控制器的构造函数中注入$ filter。
var cpltDate = $filter('date')($scope.CompletedDate, 'MM/dd/yyyy');
var step6 = {
Id: $scope.stepId,
ProblemId: $scope.problemId,
WhenOptions: $scope.whenOptions,
CounterMeasures: $scope.counterMeasures,
CounterMeasureWhens: $scope.counterMeasureWhens,
CompletedDate: cpltDate
};
答案 2 :(得分:0)
new Date().toJSON()
也应该有用。而不是新的Date()使用您想要的任何javascript Date对象。默认的MVC模型绑定器处理得很好。
答案 3 :(得分:0)
这里的问题似乎是$scope.CompletedDate
是日期("Date(1426636800000)"
)的字符串命令。必须对其进行评估才能获得日期。
使用eval($scope.CompletedDate)
或eval($scope.CompletedDate).toUTCString()
可能会解决问题。
var step6 = {
Id: $scope.stepId,
ProblemId: $scope.problemId,
WhenOptions: $scope.whenOptions,
CounterMeasures: $scope.counterMeasures,
CounterMeasureWhens: $scope.counterMeasureWhens,
CompletedDate: eval($scope.CompletedDate)
// step 6 specific data
};