Html.Label、Html.LabelFor、Html.LabelForModelの違いは何ですか


86

違いは何だ@Html.Label()@Html.LabelFor()@Html.LabelForModel()方法は?


そのすべてがその名のとおりです。1つは一般ラベル用、1つは特定のモデルプロパティラベル用、もう1つは一般モデルラベル用です。
フランシスコアフォンソ2013年

6
@FranciscoAfonsoしかし、それは彼らが実際に何をしているのかを実際には説明していません。
Ant P

回答:


110

Html.Label 名前が指定された入力テキストと一致する入力のラベルを提供します(より具体的には、文字列式と一致するモデルプロパティのラベル)。

// Model
public string Test { get; set; }

// View
@Html.Label("Test")

// Output
<label for="Test">Test</label>

Html.LabelFor 提供された式で表されるプロパティ(通常はモデルプロパティ)のラベルを提供します。

// Model
public class MyModel
{
    [DisplayName("A property")]
    public string Test { get; set; }
}

// View
@model MyModel
@Html.LabelFor(m => m.Test)

// Output
<label for="Test">A property</label>

Html.LabelForModel少しトリッキーです。forモデルオブジェクトによって表されるパラメーターの値が値であるラベルを返します。これは、特にカスタムエディタテンプレートに役立ちます。例えば:

// Model
public class MyModel
{
    [DisplayName("A property")]
    public string Test { get; set; }
}

// Main view
@Html.EditorFor(m => m.Test)

// Inside editor template
@Html.LabelForModel()

// Output
<label for="Test">A property</label>

それはあります@Html.EditorFor(m => Test)@Html.EditorFor(m => m.Test)
Fabricio 2013年

12

Html.Label -コンストラクターに渡される文字列が何であれ、ラベルタグを作成するだけです

Html.LabelFor-その特定のプロパティのラベルを作成します。これは強く型付けされています。デフォルトでは、これはプロパティの名前を実行するだけです(以下の例では、そのDisplay属性が存在しない場合はMyPropertyを出力します)。これのもう1つの利点は、モデルにdisplayプロパティを設定できることです。これが、ここに配置されます。

public class MyModel
{
    [Display(Name="My property title")
    public class MyProperty{get;set;}
}

あなたの見解では:

Html.LabelFor(x => x.MyProperty) //Outputs My property title

上記では、LabelForはを表示します<label for="MyProperty">My property title</label>。これはうまく機能するので、そのプロパティのラベルを1か所で定義して、どこにでも表示させることができます。


これは本当にLabelForModel目的ではありません-私の答えを参照してください。
Ant P

6

の使い方を@Html.LabelForModel()もっと詳しく説明する必要があると思います。

LabelForModelメソッドは、HTMLラベル要素と、モデルによって表されるプロパティのプロパティ名を返します。

次のコードを参照できます。

モデルのコード:

using System.ComponentModel;

[DisplayName("MyModel")]
public class MyModel
{
    [DisplayName("A property")]
    public string Test { get; set; }
}

ビュー内のコード:

@Html.LabelForModel()
<div class="form-group">

    @Html.LabelFor(model => model.Test, new { @class = "control-label col-md-2" })

    <div class="col-md-10">
        @Html.EditorFor(model => model.Test)
        @Html.ValidationMessageFor(model => model.Test)
    </div>
</div>

出力スクリーンショット:

ここに画像の説明を入力してください

asp.netフォーラムで回答するための参照


4

2つの方法で達成できるよりも、customernameというテキストのラベルが必要だとします。

[1]@Html.Label("CustomerName")

[2]@Html.LabelFor(a => a.CustomerName)  //strongly typed

2番目の方法では、モデルのプロパティを使用しました。ビューがモデルを実装している場合は、2番目の方法を使用できます。

詳細については、以下のリンクをご覧ください

http://weblogs.asp.net/scottgu/archive/2010/01/10/asp-net-mvc-2-strongly-typed-html-helpers.aspx


Html.LabelForModelはどうですか?
Fabricio

...それらはすべて自分の名前を言って何のように、モデルを表す文字列でラベルを返します
フランシスコ・アフォンソ

申し訳ありませんが、@ html.LableForModelを見たことがなく、使用していません:)
Mahesh Chitroda 2013年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.