我将模型传递给包含异步加载的表单的视图partial。似乎所有事情都会如预期的那样出现,除了日期时间,这会导致这种情况发生吗?
Javascript功能
function loadUpdateEventForm(eventID) {
getEventDetails(eventID, function(dnnEvent) {
if(dnnEvent != null) {
$("#updateEventForm").load(urlEditEventForm, dnnEvent, function () {
$("form#updateEventForm").submit(function (event) { submitNewEvent(event); });
});
dialog = $("#updateEventForm").dialog({ modal: true, width: '80%', position: { my: 'top', at: 'top+150' } });
console.log(dnnEvent);
return;
}
});
}
来自console.log(dnnEvent)的输出
Object {EventID: 2524, EventName: "sample", EventDescription: "sample", EventTimeBegin: "/Date(1418709600000)/", UserID: 1}
提供部分视图的C#操作方法
public ActionResult _EditForm(DNNEventUpdateModel dnnEvent)
{
return View(dnnEvent);
}
DNNEventUpdateModel
public class DNNEventUpdateModel
{
[Required]
public int EventID { get; set; }
[Required]
public string EventName { get; set; }
[Required]
[DataType(DataType.MultilineText)]
public string EventDescription { get; set; }
[Required]
public DateTime EventTimeBegin { get; set; }
public int UserID { get; set; }
public string EventTimeBeginForDisplay
{
get
{
return this.EventTimeBegin.ToShortDateString();
}
set
{
this.EventTimeBegin = Convert.ToDateTime(value);
}
}
}
刚刚意识到我忘了在控制器中发布这是怎么回事。这就是我对日期的意思:
答案 0 :(得分:1)
也许有更好的解决方案,但我将javascript日期作为字符串发送到服务器,试试。
var date = new Date();
var day = date.getDay();
var month = date.getMonth();
var year = date.getFullYear();
var hour = date.getHours();
var minute = date.getMinutes();
var second = date.getSeconds();
var time = day + "/" + month + "/" + year + " " + hour + ':' + minute + ':' + second;
然后,在服务器端解析字符串。
DateTime.ParseExact(dateFromClient, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
修改强>
我在发送日期前曾使用过一次该功能。
function EditDate(oldDate) {
var date = oldDate.split(".");
return date[2] + "." + date[1] + "." + date[0];
}
答案 1 :(得分:1)
日期格式EventTimeBegin: "/Date(1418709600000)/"
是默认JsonScriptSerializer
的函数,将在this question的答案中详细讨论。
您可以使用
将值解析为字符串new Date(parseInt(response.TimeBegin.replace("/Date(", "").replace(")/",""), 10))
其他选项包括在控制器方法中格式化日期,例如
var data = new
{
....
TimeBegin = YourDate.ToString("o"),
....
};
return Json(data, JsonRequestBehavior.AllowGet);
并在脚本中
new Date(response.TimeBegin);
或使用另一个json序列化程序,例如Json.NET,它以ISO格式序列化日期。
This blog还讨论了一些客户端和服务器端解决方案。
答案 2 :(得分:0)
看起来你正在做一个表格帖子。
$("form#updateEventForm").submit(function (event) { submitNewEvent(event); });
因此MVC端的模型绑定器不使用JSON解析器。我猜是submitNewEvent将事件中的值填充到表单字段中。由于不涉及JSON模型绑定器,因此无法正确处理JSON格式化日期的表单字段。
如果您使用类似$.post
的内容并且逐字发布JSON字符串而不是填充表单,MVC将处理JSON帖子。这样,在模型绑定期间使用JSON解析器,并且将正确处理JSON格式化日期。
否则,如果您承诺使用表单帖子,则需要在发布之前使用格式正确的日期填充表单。这将是&#39; YYYY-MM-DD&#39;或换句话说<input value='2014-01-30'>
。您不能盲目地使用JSON格式的日期字符串并将其插入表单字段。
当然,我根据您使用的javascript函数调用做出假设,但我们没有代码。