Yan*_*hon 6 c# asp.net-mvc jquery datetime
我有这个控制器动作:
[HttpGet]
public ActionResult CreateForm(Models.ReminderModel model)
{
if (model.FkUserId == null && model.FkRoleId == null) {
model.FkUserId = UserSession.Current.UserId;
model.ReminderDate = DateTime.UtcNow;
}
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
如果未指定URL参数,则操作会正常运行,但是当我指定某些数据时,所有内容都会设置为BUT ReminderDate.例如,执行请求
model[0][name]:FkUserId
model[0][value]:2
....
model[2][name]:ReminderDate
model[2][value]:2013-03-09T10:33:04.934Z
...
Run Code Online (Sandbox Code Playgroud)
注意:params是序列化视图jQuery,并且一直工作到现在为止.这是我们第一次尝试将一个DateTime回传给控制器动作.
在动作控制器中,model.FKUserId将正确设置,但是ReminderDate将被设置为"0001-01-01T00:00:00.000Z".
我错过了什么?
**更新**
事实证明,C#不适用于ISO格式的日期时间字符串.它更喜欢UTC.2013-03-05T16:23:00.000Z需要发送的东西u20130305212358000(EST).绑定也足够了,但我认为这是最好的解决方案.
您会得到该日期,1/1/0001因为当 MVC 无法找到要提供的值,或者由于某种原因无法应用可用值时,该日期的默认值仍然存在,对于DateTimeis1/1/0001或DateTime.MinValue。如果您使用DateTime?,您将看到 null。
最好使用 Fiddler 或 Firebug 来检查请求并查看发送的值是什么。它很可能需要调整。您还可以通过 Form 集合检查当前表单的响应,并自己手动转换该值。
一些替代方案是 MVC 模型绑定(尽管有些人提到了这种方法的缺点)。下面列出了更多信息:
| 归档时间: |
|
| 查看次数: |
2340 次 |
| 最近记录: |