web-dev-qa-db-ja.com

Html.DisplayTextFor()の意味は何ですか?

強く型付けされたhtmlヘルパーを使用する十分な理由はありますか...

<%: Html.DisplayTextFor(model => model.Email) %>

とは対照的に...

<%: Model.Email %> 
47
Sean Cain

次のモデルを検討してください。

public class MyModel
{
    public string Name { get; set; }

    [DisplayFormat(NullDisplayText = "No value available!")]
    public string Email { get; set; }

}

私からしてみれば:

<%= Html.DisplayTextFor(m => m.Email) %>

<%: Model.Email %>

電子メールを「null」のままにしておくと、1行目に「値なし」と表示されますが、2行目には何も表示されません。

結論:Html.DisplayTextForはプロパティのDataAnnotationsを考慮に入れますが、<%: Model.Email %>は考慮しません。また、<%: Model.Email %>は、値がnullの場合に「オブジェクト参照エラー」をスローしますが、<%= Html.DisplayTextFor %>はスローしません。

74
Yngve B-Nilsen

DisplayTextForは、「DisplayFor」および「EditFor」の実行中にも呼び出されます。これにより、テンプレート化されたヘルパーは、設定されている場合は正しいテンプレート化されたヘルパーを使用してテキストを表示します。したがって、単一のテンプレート化されたヘルパーへの変更は、そのテキストアイテムのすべての表示に反映されます...単純な表示、フォームの編集、フォームの作成など等.

6
JcMaltaDev

まあ、モデルを渡さない(またはnullを渡さない)場合、DisplayTextForは壊れません。 Model.Emailはnullで例外をスローします。したがって、DisplayTextForはより堅牢です。

強く型付けされたヘルパーのポイントは、コンパイル時間のチェックを強化できることです。これは、リファクタリング時に非常に便利です。

DisplayTextForを使用すると、ページ全体で(他の強く型付けされたヘルパーと共に)一貫した構成を使用できます。一部の人々はそれがより魅力的だと思うかもしれません。

DisplayTextForでは、テンプレートとフィールドの名前をパラメーターとして渡すこともできます。

5
Justin