Я недавно обновил один из моих проектов с MVC2 до MVC3 и соответственно скорректировал некоторый код.Одна проблема, с которой я столкнулся, - это проблема JSON и DateTime.
У меня очень простой код для демонстрации, идея очень проста, что я возвращаю JSON из контроллера, клиентский JavaScript получает как есть и отправляет обратно в другой метод действия для сравнения данных.
Моя модель представления, используемая в качестве контейнера данных:
public class JsonViewModel {
public int IntegerValue {
get;
set;
}
public string StringValue {
get;
set;
}
public DateTime DateTimeValue {
get;
set;
}
}
У меня есть контроллер с двумя методами действия, один для генерации данных JSON и один для получения данных JSON:
public class HomeController : Controller {
[HttpPost]
public JsonResult GetJsonData() {
JsonViewModel data = new JsonViewModel
{
IntegerValue = 99,
StringValue = "This is test string",
DateTimeValue = DateTime.Now
};
return new JsonResult { ContentEncoding = Encoding.UTF8, Data = data };
}
[HttpPost]
public ActionResult ReceiveJsonData(JsonViewModel data) {
return View(data);
}
}
ПредставлениеКод также очень прост:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<SomeClass>" %>
<!DOCTYPE html>
<html>
<head runat="server">
<link type="text/css" href="<%: Url.Content("~/Content/site1.css") %>" rel="stylesheet" />
<link type="text/css" href="<%: Url.Content("~/Content/themes/base/jquery.ui.all.css") %>" rel="stylesheet" />
<script type="text/javascript" src="<%: Url.Content("~/Scripts/jquery-1.5.1.js") %>"></script>
<script type="text/javascript" src="<%: Url.Content("~/Scripts/jquery.validate.js") %>"></script>
<script type="text/javascript" src="<%: Url.Content("~/Scripts/jquery.validate.unobtrusive.js") %>"></script>
<script type="text/javascript" src="<%: Url.Content("~/Scripts/jquery-ui-1.8.11.js") %>"></script>
</head>
<body>
<input type="button" value="JSON Test" id="btnJson" />
<script>
$(document).ready(function () {
$('#btnJson').click(function () {
$.ajax({
type: "Post",
url: "/Home/GetJsonData/",
dataType: "json",
error: function (request, error) {
alert("readyState: " + request.readyState + "\nstatus: " + request.status);
alert("responseText: " + request.responseText);
},
success: function (data) {
var jsonData = JSON.stringify(data);
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "/Home/ReceiveJsonData/",
cache: false,
data: jsonData,
dataType: "html",
success: function (result) {
//alert(result);
},
error: function (request) {
alert("readyState: " + request.readyState + "\nstatus: " + request.status);
alert("responseText: " + request.responseText);
}
});
}
});
});
});
</script>
</body>
</html>
Я ожидаю, что объект, генерируемый и ищущий в GetJsonData
методе действия, должен быть таким же, как ReceiveJsonData
метод действия.Но фактическое поведение состоит в том, что целочисленные и строковые значения сохраняются, но datetime
значение сбрасывается.
Любая подсказка, почему?