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コントローラー アクションに back を渡そうとするのはこれが初めてです。

アクション コントローラでは、model.FKUserIdは正しく設定されますが、ReminderDateに設定され"0001-01-01T00:00:00.000Z"ます。

私は何が欠けていますか?

**更新**

結局のところ、C# は ISO 形式の日時文字列では機能しません。UTC のものを優先します。のようなものを(EST)2013-03-05T16:23:00.000Zとして送信する必要があります。u20130305212358000バインディングでも十分でしたが、これが最善の解決策だと思います。

4

1 に答える 1

3

MVC が提供する値を見つけること1/1/0001ができない場合、または何らかの理由で使用可能な値を適用できない場合、日付のデフォルトが残るため、日付は にDateTimeなり1/1/0001ますDateTime.MinValue。を使用DateTime?すると、null が表示されます。

Fiddler または Firebug を使用してリクエストを検査し、送信される値を確認するとよいでしょう。調整が必要な場合がほとんどです。Form コレクションを介して現在のフォームの応答を確認し、値を自分で手動で変換することもできます。

いくつかの代替手段は MVC モデル バインディングです (ただし、このアプローチの短所について言及しているものもあります)。さらに詳しい情報を以下に示します。

于 2013-03-05T16:19:29.897 に答える