2011-08-17 39 views
7

私はこのアプリケーションを持っており、デフォルトの日付フォーマットはdd/MM/yyyyでなければなりません(言語はブラジルのポルトガル語です)。ASP.Net MVCモデルバインディング - 日付形式を変更するには?

カルチャとUIカルチャを既にpt-BRに設定していましたが、今度はmyDate.ToShortDateString()が必要な日付を返します。私はそれらを表示するのに問題はありません。

ユーザーが入力フィールドに17/08/2011などの日付を入力し、フォームを送信すると、アクションにDateTimeパラメータがnullになるという問題があります。私が08/17/2011の形式で日付を指定してもうまくいきます。

どのように私の日付を正しく解析するASP.Net MVCモデルのバインディングを作ることができますか?

+4

この回答を確認http://stackoverflow.com/questions/528545/mvc-datetime-binding-with-incorrect-date-format/528560#528560 – dotjoe

+0

この質問を解決してくださいhttp://stackoverflow.com/質問/ 6177626/asp-net-mvc-default-model-binder-problem – agradl

答えて

10

。私のフォームはGETメソッドを介して投稿していました。MVCはRouteDataまたはPOSTメソッドを介してフォームに渡されたときに、アクションパラメータのカルチャを使用します。

フォームをPOSTメソッドに変更しただけで機能しました。

+0

GETメソッドが文化を適用しないと誰も言わなかったので、1日が失われました。私の一日を保存しました..ありがとう、まだ、あなたはあなたの投稿を修正する必要があります、それはGETではなくPOSTで動作します。 –

+0

修正されました。ありがとう。 – Doug

+0

MVC ModelBinderの仕組みとその理由:http://weblogs.asp.net/melvynharbour/mvc-modelbinder-and-localization – webStuff

2

DateTime型のDateTimeFormatが不足していることが問題だと思います。あなたが確認したい

<input type="text" name="DateProperty" id="DateProperty" 
     value="@(Model.DateProperty.Value.ToString("d", 
      System.Threading.Thread.CurrentThread.CurrentUICulture.DateTimeFormat))" /> 

EDIT **

もう一つは、あなたの入力要素の「名前」プロパティは、あなたの行動に渡しているものと一致することです。そうでない場合は、毎回POSTアクションにNULLが表示されます。

 
    [HttpPost] 
    public ActionResult DoStuff(string dateParam) 
    { 
     return RedirectToAction("Home","Index", new { }); 
    } 

"dateParam"ここでnameプロパティと一致する必要があります。

<input id="dateParam" name="dateParam" value="10/10/2010" /> 
+0

日付をHTMLに出力することは問題ではありません。提出された値をバインドする。私があなたが言ったことをしても、フォーム提出は期待通りには動作しません。 – Doug

5

ビューモデルにあなたの財産でこれを試してみてください:私はhappendedものを見つけ

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")] 
関連する問題