違いは何だ@Html.Label()
、@Html.LabelFor()
と@Html.LabelForModel()
方法は?
回答:
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)
?
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
目的ではありません-私の答えを参照してください。
の使い方を@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>
出力スクリーンショット:
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