2011-11-29 13 views
6

私は、1つの場所に非表示の入力フィールドに配置されたDateTimeプロパティを持つモデルを持っています。問題は時間が値に含まれていることで、私のカスタム日付の検証が##/## /#の形式で日付を期待非表示のDateTimeのASP.NET MVC形式

<input id="StartDate" name="StartDate" type="hidden" value="1/1/2011 12:00:00 AM" > 

:次のHTMLを生成します

@Html.HiddenFor(m => m.StartDate) 

###したがって、検証は失敗します。私は簡単にこの状況の作業を行うために私のカスタム日付の検証を変更することができますが、私はむしろ隠しフィールドは、正しい形式で値を置きますようにしたいと思います。

モデルプロパティでDisplayFormat属性を使用しようとしましたが、非表示入力の形式を変更していないようです。

私は、非表示の入力を手動で作成し、値のStartDate.ToString( "MM/dd/yyyy")を呼び出すことができますが、このモデルを項目の動的生成リストでも使用しているので、インデックス化されており、入力のIDと名前を把握するのが少し難しくなるCollection [Some-Guid] .StartDateのようなIDを持っています。

ページのフィールドを隠し入力としてレンダリングするときに、特定の形式で 'value'値を出力させる方法はありますか?

答えて

9

カスタムエディタテンプレートを使用することができます

public class MyViewModel 
{ 
    [UIHint("MyHiddenDate")] 
    public DateTime Date { get; set; } 
} 

をしてから~/Views/Shared/EditorTemplates/MyHiddenDate.cshtmlを定義します。

@model DateTime 
@Html.Hidden("", Model.ToString("dd/MM/yyyy")) 

、最終的にはあなたのビューでEditorForヘルパーを使用します。

@model MyViewModel 
@Html.EditorFor(x => x.Date) 

この意志をのカスタムエディタテンプレートをレンダリングするビューモデルのプロパティを使用して、隠しフィールドを目的の形式で値で表示します。

+1

チャームのように働いた。唯一の欠点は、私が実際に編集可能にする必要があるときよりも、フィールドが隠れているときに、このインスタンスのための別のモデルを持たなければならないことです。しかし、それは本当に悪いことではありません。 –

関連する問題