web-dev-qa-db-ja.com

MVCでLabelForを使用する必要があるのはなぜですか?

<label>の代わりにLabelForを使用する必要があるのはなぜですか?

例えば。

@Html.LabelFor(model => model.FirstName)
@Html.DisplayFor(model => model.FirstName)

<label for="FirstName">First Name</label>
@Html.DisplayFor(model => model.FirstName)

上記に加えて、@ p.s.w.gはこの質問のDRYの側面をカバーしました。ローカライズに役立つかどうかも知りたいです。つまり、現在の言語設定に基づいて異なるラベル。

35
Jamie

さて、次のような DisplayNameAttribute でモデルを装飾した場合:

[DisplayName("First Name")]
string FirstName { get; set; }

次に、ラベルのテキストを1か所で指定するだけです。いくつかの場所で同様のラベルを作成する必要がある場合があります。ラベルのテキストを変更する必要がある場合は、一度だけ行うと便利です。

これは、アプリケーションをさまざまな言語にローカライズする場合にさらに重要です。これは DisplayAttribute で実行できます。

[Display(Name = "FirstNameLabel", ResourceType = typeof(MyResources))]
string FirstName { get; set; }

また、より厳密に型指定されたビューがあることも意味します。 "FirstName"のような文字列を頻繁に入力する必要がある場合、それを簡単に指定できますが、ヘルパーメソッドを使用すると、ほとんどの場合、コンパイラがそのようなミスをキャッチできます。

46
p.s.w.g

LabelForを使用すると、コントロールを気にせずにビューモデルからすべてを制御できます。

2つの場所で同じビューモデルを使用するとします。つまり、1つの場所で名前を変更してすべてのコントロールを更新できることを意味します。

haveは使用されませんが、用途はあります。

5
webnoob