2011-02-05 4 views
0

私はカスタムクラス名が必要なので、DateTimeテンプレートをオーバーライドしようとしています。テンプレートにメタタグを尊重する方法は?

だから私はdatetime.cshtml私の見解モデルで

@model System.DateTime 

@Html.TextBox("", Model, new { @class = "date-picker" }) 

//

[DataType(DataType.Date)] 
    public DateTime Date { get; set; } 

だから私はそれがちょうど私のメタタグを使用して作成する方法を確認していない/私のedittemplatesでこれを持っており、日付のみを使用してください。はい、私はそれをハードコードでき、Mode.ToShortDate()を持っているかもしれませんが、たぶんToLongdate()を1回したいと思うかもしれません。

編集

私は人々が混乱してきていると思います。最初に、クラス名を無視して、なぜ私がデフォルトのdatetimeをオーバーライドしているのかを示すために、クラス名を無視しました。

これらのクラス名をハードコードすることは私の解決策ではないように思えます。なぜ私は本当にこれらのテンプレートを使用したいのかと思っているのですが、代わりにtextboxfor()を使用します。

問題は、「日付」部分だけを表示したいので、「日付」を文字列に変更する必要があります。だから私は後でdatetimeに文字列を変換する必要があるので、私はそれを私のdbに挿入することができます。テンプレートを使用すると、それをdatetimeのままにしてコンバージョンを保存できます。

私にとっては、すべてのdatetimeに同じクラス名と同じhtmlプロパティが必要だと思うのは変です。これらのeditorFor()は実際にhtmlプロパティを取ります。

第2の私の全投稿はこれでした。

私はdatetime型のテンプレートをオーバーライドして、この

[DataType(DataType.Date)] 
    public DateTime Date { get; set; } 

をしない場合は、レンダリングされた結果は、日付のみの一部が表示されます。今私はdatetimeをオーバーライドするので、私はそれに私のカスタムのものを追加することができますし、私はそれがメタタグを尊重しない完全なdatetimeをレンダリングする上記のことを行う。

私の質問はどのようにしてメタタグを使用するのですか?私が持っているすべての日付フィールドが日付だけを表示するわけではないので。だから、そのようなものをテンプレートにハードコーディングするのはダメだろう。

答えて

0

私はあなたのサンプルを再作成しただけで、期待通りに動作するようです。

ビューでは、通常どおりに[日付]プロパティをバインドしていますか?

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

これをお持ちの場合は、必要に応じて機能するはずです。しかし、まだそれが動作していない場合、私は他のものを試して考えることができます。モデルに次の属性を追加します。

次に、ToLongDate.cshtmlという名前のedittemplatesフォルダに新しいPartialViewを作成し、次の行を追加します。

@model System.DateTime 
@Html.TextBox("", Model.ToLongDateString(), new { @class = "date-picker" }) 

このテクニックを使用すると、さまざまな日付形式のバリエーションを作成し、それぞれ異なるプロパティを使用することができます。

+0

これは本当に動作しますに属性? MVCはToLongDateString()の呼び出しに基づいてテンプレートを識別できますか? – mare

+0

ToLongDateString()の呼び出しではなく、[UIHint]属性で指定しているテンプレートの名前です。この例では、Views/EditTemplatesで "ToLongDate"という名前のテンプレートを探します。私はそれを何とか呼び出せたかもしれませんが、解決していた問題に関連したものにしておきたいと思っていました。それで、 "ToShortDate"という別のテンプレートを作成することができます。 – davidferguson

+0

そして、私はこれを行うには最適な方法だと思っていません。もし誰かがいつかドイツ、イギリス、アメリカ、日本の日付フォーマットはサポートされますか? * n *個のテンプレートを作成しますか? @ Html.Text( ""、Model.ToLongDateString()、...)の – mare

0

私はそれを行う最も簡単な方法は、追加のビューデータを受け取るEditorFor()のオーバーロードを使用することだと思います。そのオーバーロードを使用してビューデータをテンプレートに送信することができます。あなたは、日付形式の文字列を送信し、このようにテキストボックスを描画することができます:ここで

@Html.TextBox("", Model.ToString(ViewData["format"].ToString()), new { @class = "date-picker" }) 

は、すべての可能な日付フォーマット文字列 http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

0

あり、私はそれは多分古いポストが、このことを知っていますあなたが必要とする答え。それはあなたがHTMLを追加することができ、あなたのモデルにカスタム属性を使用していますが、あなたのビュー

http://aspadvice.com/blogs/kiran/archive/2009/11/29/Adding-html-attributes-support-for-Templates-2D00-ASP.Net-MVC-2.0-Beta_2D00_1.aspx

+0

私はそれを試してみることを見ました。私はおそらくそれが動作するだろうものをオーバーライドすることを望んでいたが、それは可能ではないようだ。私はポストにあるものを試し、それがうまくいくかどうかを見ますが、文字列、ints、日時、そして基本的にはカスタムのクラス名やhtml属性が必要なので、それは大変な作業のようです。 – chobo2

+0

あなたの権利は、デフォルトでそこにあるはずのもののための多くの仕事のようです。他の誰かがより良い解決策を提供できるなら、私は代替案に興味があります – davidferguson

関連する問題