web-dev-qa-db-ja.com

@ Html.DisplayForの構文は何ですか?

Razorでは、@ HTMLはリンク、入力などのためにHTMLを生成するなど、きちんとしたことをしています。

しかし、私はDisplayFor関数を取得していません...

なぜ私は書くでしょう:

@Html.DisplayFor(model => model.Title)

私はちょうど書くことができたとき:

@Model.Title
216
Michael Pryor

Html.DisplayFor()は、プロパティの型と一致するDisplayTemplateをレンダリングします。

見つからない場合は、.ToString()が呼び出されると思います。


表示テンプレートについて知らない場合、それらはコントローラに関連付けられたビューフォルダ内のDisplayTemplatesフォルダに入れることができる部分ビューです。


例:

次のコードを使用して、viewsフォルダーのDisplayTemplatesフォルダー内にString.cshtmlという名前のビューを作成するとします(例:HomeShared)。

@model string

@if (string.IsNullOrEmpty(Model)) {
   <strong>Null string</strong>
}
else {
   @Model
}

@Html.DisplayFor(model => model.Title)Titleが文字列であると仮定)はテンプレートを使用し、文字列がnullの場合、または空の場合は<strong>Null string</strong>を表示します。

207
Bertrand Marron

私は主な利点はあなたがあなた自身の表示テンプレートを定義するか、またはデータアノテーションを使うときになるだろうと思います。

例えば、あなたのタイトルが日付だったら、あなたは定義することができます

[DisplayFormat(DataFormatString = "{0:d}")]

そして、どのページでも一貫した方法で値を表示します。それ以外の場合は、複数ページの表示をカスタマイズする必要があります。そのため、普通の文字列にはあまり役立ちませんが、通貨、日付、電子メール、URLなどには役立ちます。

たとえば、電子メールアドレスがプレーンな文字列ではなく、リンクとして表示される可能性があります。

<a href="mailto:@ViewData.Model">@ViewData.TemplateInfo.FormattedModelValue</a>
73
Daveo

DisplayForはテンプレート作成にも役立ちます。あなたはあなたのモデルのテンプレートを書くことができ、そしてこのようなことをすることができます:

@Html.DisplayFor(m => m)

@Html.EditorFor(m => m)に似ています。同じモデルに対して同じ表示ロジックを何度も記述する必要がないように、DRYプリンシパルには便利です。

MVC2テンプレートに関するこのブログを見てください。それはまだMVC3に非常に適用可能です:

http://www.dalsoft.co.uk/blog/index.php/2010/04/26/mvc-2-templates/


モデルにデータ注釈がある場合にも便利です。たとえば、モデルのプロパティがEmailAddressデータアノテーションで装飾されている場合、DisplayForはそれをmailto:リンクとしてレンダリングします。

28
vcsjones

しばらく自分のために答えを探した後、私は何かを見つけることができました。一般的に、1つのプロパティのみに使用している場合は、生成されたHTMLの「ソースの表示」を実行しても同じように表示されます。

    <td>
    myClassNameProperty
    </td>
   <td>
    myClassNameProperty, This is direct from Item
    </td>

これは以下のコードから生成されたHTMLです。

<td>
@Html.DisplayFor(modelItem=>item.Genre.Name)            
</td>

<td>
@item.Genre.Name, This is direct from Item
</td>

私はこの場合私のクラス "ジャンル"のための1つのステートメントですべてのプロパティを表示したい場合は今同時に、私は私の入力を節約するために@ Html.DisplayFor()を使用することができ

以下のように、ジャンルの各プロパティに対して別々のステートメントを書く代わりに、@ Html.DisplayFor(modelItem => item.Genre)を書くことができます。

@item.Genre.Name
@item.Genre.Id
@item.Genre.Description

など、プロパティの数に応じて。

4
Vikas Sharma