web-dev-qa-db-ja.com

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

@Html.Label()@Html.LabelFor()@Html.LabelForModel()メソッドの違いは何ですか?

83
Fabricio

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>
106
Ant P

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

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

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か所で定義して、どこにでも表示できます。

12
CorrugatedAir

@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>

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

enter image description here

asp.netフォーラムの回答への参照

6
AndreyWD

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

3
Mahesh Chitroda