2009-08-27 14 views
4

現在、jQuery Date Timeピッカーを使用して、データベースに格納する日付時刻を選択しています。日付時刻選択ツールを使用すると、バインドされているテキストボックスに結果が正しく表示されます(IE 27/09/2009 16:00)。ただし、日付時刻がMVCアプリケーションに正しく渡されていないため、01/01/0001 00:00:01として受信されています。jQuery DateTimeピッカーとASP.NET MVC

これに対処する方法では、1つのパラメター - 一致mが必要です。このページは厳密に一致して入力されます。

<p> 
    <label for="TimeAndDate">Time and date (click to reveal date and time picker):</label> 
    <br /> 
    <%= Html.TextBox("TimeAndDate") %> 
    <%= Html.ValidationMessage("TimeAndDate", "*") %> 
</p> 

<script type="text/javascript"> 
    $(function() { 
     $('#TimeAndDate').datepicker({ 
      duration: '', 
      showTime: true, 
      constrainInput: false 
     }); 
    }); 
</script> 

長さについては、上記のスクリプトは省略していますが、ページには含まれています。テキストボックスと検証メッセージフィールドは、Visual Studioによって生成されました。

テキストボックスの文字列をメソッドに渡す前に暗黙的にDateTimeオブジェクトに変換する必要があると感じていますが、どうすればよいか分かりません。

コントローラのアクションへの入力パラメータが本当にDateTimeオブジェクトでない場合、この上の任意のヘルプははるかに

おかげで、 アンディ

+0

あなたはまた、日付文字列を解析し、C#のコードを投稿できます。 – MrHus

+0

現時点では何もありません。私が私の記事で言ったように、私はそれをする必要があると感じていましたが、どこに行く必要があるのか​​分かりません(ビューとコントローラの間のどこかに) –

+0

何が通過しているかを見るためにFiddlerを使いますサーバーに送信します。 – RichardOD

答えて

6

これをいただければ幸いです通常起こります。

コントローラーアクションへの入力パラメーターの名前が "TimeAndDate"で、タイプがStringであることを再度確認します。

DateTime.Parse(String)を使用して、文字列をDateTime型に解析できます。ここ

+0

私はパラメータとしてコントローラに日付時刻を渡していません、私はオブジェクトの一部としてそれを渡しています:public ActionResult MatchesAdd(マッチm –

+0

それは確かにそれが認識されていない理由です。 Matchオブジェクトには、あなたのコードの小さな部分だけを置くと間違ったことがあります。 – Mickel

+0

これ以上の部分を見る必要がある場合は質問してください。フィールドTimeAndDateをDateTimeとして取得し、Matchesという名前のSQLテーブルから派生したものです –

0

ページからデータを受信するコントローラのアクションである:

[ValidateInput(false)] 
    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult MatchesAdd(Match m) 
    { 
     try 
     { 
      m.Against = Server.HtmlEncode(m.Against); 
      m.Info = Server.HtmlEncode(m.Info); 
      m.MatchID = Guid.NewGuid(); 

      m.Played = false; 
      m.OurScore = 0; 
      m.EnemyScore = 0; 

      DM.AddMatch(m); 

      return RedirectToAction("Matches/List/Upcoming"); 
     } 
     catch(Exception ex) 
     { 
      return Content(m.TimeAndDate.ToString()); 
     } 
    } 

catchブロックは、この時点でのデバッグのために純粋です。

ご覧のとおり、DateTimeオブジェクトの解析は一切行っていませんが、アクションの開始時にブレークポイントを設定していますが、開始時刻が間違っています。確かに私はそれから正しい日付を取得できませんか?

[ValidateInput(false)] 
[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult MatchesAdd(FormCollection values) 
{ 
    Match m = new Match(); 

    try 
    { 
     UpdateModel<Match>(m); 

     // If your date still has not been picked up you could 
     // just uncomment this next line: 
     // m.TimeAndDate = DateTime.Parse(values["TimeAndDate"]); 

     DM.AddMatch(m); 

     return RedirectToAction("Matches/List/Upcoming"); 
    } 
    catch(Exception ex) 
    { 
     return Content(m.TimeAndDate.ToString()); 
    } 
} 
+0

Html.BeginForm()タグはどのように見えますか?コントローラの名前は何ですか? – Mickel

+0

私のHtml.BeginForm()は標準です:(Html.BeginForm()を使用し、コントローラの名前はAdmin(Controller) –

+0

です。あなたのテキストボックスに2009-08-27のようなものを書くと、それでも動作しません? – Mickel

0

+0

まだ例外をキャッチしています –

0

この

[ValidateInput(false)] 
[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult MatchesAdd(FormCollection collection) 
{ 
    dateTime date = DateTime.Parse(collection["TimeAndDate"].ToString()) 

return view(); 
} 

を試してみてください。これはあなたの日付を与える:あなたはこの代わりにしようとしたらどうなりますか

0

Andyは、jQueryが使用するデフォルトの日付形式が原因だと思っています。私のPC上で実行されているサンプルコードでは、2012年12月22日に取得します(現在の日付は米国の形式です)、私はオーストラリアにいます。あなたはDATEFORMATを使ってjQueryので使用される日付形式を変更することができます。

<script type="text/javascript"> 
    $(function() { 
     $('#TimeAndDate').datepicker({ 
      duration: '', 
      showTime: true, 
      constrainInput: false, 
      dateFormat: "dd M yy" 
     }); 
    }); 
</script> 
  • のjQuery:DD MはYY = DD MMMのYYYY(C#の)
  • jQueryのDDMM YY = DD MMMMのYYYY(C#の)

また、あなたはここを参照したい場合があります: MVC DateTime binding with incorrect date format

関連する問題