7

我有这个控制器动作:

[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".

我错过了什么?

**更新**

事实证明,C# 不适用于 ISO 格式的日期时间字符串。它更喜欢UTC。类似的东西2013-03-05T16:23:00.000Z需要作为u20130305212358000(EST)发送。绑定也足够了,但我认为这是最好的解决方案。

4

1 回答 1

3

你会得到那个日期,1/1/0001因为当 MVC 找不到要提供的值,或者由于某种原因无法应用可用值时,日期的默认值仍然存在,即DateTimefor1/1/0001DateTime.MinValue. 如果您使用DateTime?,您将看到 null。

最好使用 Fiddler 或 Firebug 来检查请求并查看发送的值是什么。它很可能需要调整。您还可以通过 Form 集合检查当前表单的响应,也可以自己手动转换值。

一些替代方案是 MVC 模型绑定(尽管有些人提到了这种方法的缺点)。下面列出了更多信息:

于 2013-03-05T16:19:29.897 回答