c# MVC和DateTime在动作控制器模型
本文关键字:控制器 模型 MVC DateTime | 更新日期: 2023-09-27 18:02:27
我有这个控制器动作:
[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);
}
如果没有指定URL参数,则操作正常运行,但是当我指定一些数据时,所有内容都被设置为 but ReminderDate
。例如,使用
model[0][name]:FkUserId
model[0][value]:2
....
model[2][name]:ReminderDate
model[2][value]:2013-03-09T10:33:04.934Z
...
注意:参数是序列化视图jQuery和一直工作良好,直到现在。这是我们第一次尝试将DateTime
传递回控制器动作。
在动作控制器中,model.FKUserId
将被正确设置,而ReminderDate
将被设置为"0001-01-01T00:00:00.000Z"
。
我错过了什么?
** Update **
事实证明,c#不能处理ISO格式的日期时间字符串。它更喜欢UTC的。像2013-03-05T16:23:00.000Z
这样的东西需要作为u20130305212358000
(EST)发送。绑定也足够了,但我认为这是最好的解决方案。
您将获得1/1/0001
的日期,因为当MVC找不到一个值来提供,或者由于某种原因不能应用可用值时,日期的默认值仍然存在,这对于DateTime
是1/1/0001
或DateTime.MinValue
。如果您使用DateTime?
,您将看到null。
最好使用Fiddler或Firebug来检查请求并查看发送的值是什么。它很可能需要调整。你也可以通过form集合来检查当前表单的响应,并自己手动转换值。
一些替代方案是MVC模型绑定(尽管有人提到这种方法的缺点)。下面列出了更多信息:
- http://weblogs.asp.net/melvynharbour/archive/2008/11/21/mvc-modelbinder-and-localization.aspx
- Asp.net MVC中的自定义DateTime模型绑定器