3

MVC3 RC2とDataAnnotationsで装飾されたモデルを使用して日付をフォーマットする方法を理解しようとしています。MVC ModelMetaData属性の問題と日付のフォーマット

これは

@model MvcApplication6.Models.Model 

@Html.LabelFor(m=>m.DateOfBirth) 
@Html.TextBoxFor(m => m.DateOfBirth) 
@Html.EditorFor(m => m.DateOfBirth) 

私は実行...これが私の見解です...これは私のコントローラである...

public class IndexController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(new Model() {DateOfBirth = DateTime.Now}); 
    } 
} 

public class Model 
{ 
    [Display(Name = "Date of Birth")] 
    [DisplayFormat(@DataFormatString = "MM/dd/yyyy")] 
    public DateTime DateOfBirth { get; set; } 
} 

私のモデルであり、サイトの両方のコントロールでは、ページには文字列に含まれる時間のテキストボックスが表示されます。必要なのは日付です(デコレーションされたプロパティモデルで)。

私はこのパターンのModelMetaDataでBrad Wilsonのarticleを使用しました。

私が間違っていることは明らかですか?

答えて

7

この操作を行います。私はここでの問題は、DefaultModelBinderは(私たちは、フロントエンドのフィールドをバインドすることができないことを意味する適切な方法で日付時刻を扱っていないという事実に関係していると信じて実際に

[DisplayName("Date of Birth")] 
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
public DateTime DateOfBirth { get; set; } 
0

を我々は他の人に行うために使用されるように、DateTimeの部分へ[CastleMonorail] MVCフレームワーク)。

私はその問題に対処するためにカスタムモデルバインダーを作成しました。しかし、Scott Hanselmanは同様のことをしています。hereだから、あなたは彼のソリューションを使うことができます。

もちろん、この状況を属性で処理することもできますが、特別な書式設定をすべて DateTimeフィールドに指定する必要があります。そして、それは別の問題を解決しません:時々我々は日付部分のための1つのフィールドと時間部分のだけフロントエンドで、バックエンドに1つの日時フィールドを保持する必要があります。このモデルバインダーソリューションはまさにそれを可能にします。

関連する問題