What's the difference between Html.Label, Html.LabelFor and Html.LabelForModel

asp.net MvcRazor

asp.net Mvc Problem Overview


What's the difference between @Html.Label(), @Html.LabelFor() and @Html.LabelForModel() methods?

asp.net Mvc Solutions


Solution 1 - asp.net Mvc

Html.Label gives you a label for an input whose name matches the specified input text (more specifically, for the model property matching the string expression):

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

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

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

Html.LabelFor gives you a label for the property represented by the provided expression (typically a model property):

// 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 is a bit trickier. It returns a label whose for value is that of the parameter represented by the model object. This is useful, in particular, for custom editor templates. For example:

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

Solution 2 - asp.net Mvc

Html.Label - Just creates a label tag with whatever the string passed into the constructor is

Html.LabelFor - Creates a label for that specific property. This is strongly typed. By default, this will just do the name of the property (in the below example, it'll output MyProperty if that Display attribute wasn't there). Another benefit of this is you can set the display property in your model and that's what will be put here:

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

In your view:

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

In the above, LabelFor will display <label for="MyProperty">My property title</label>. This works nicely so you can define in one place what the label for that property will be and have it show everywhere.

Solution 3 - asp.net Mvc

I think that the usage of @Html.LabelForModel() should be explained in more detail.

The LabelForModel Method returns an HTML label element and the property name of the property that is represented by the model.

You could refer to the following code:

Code in model:

using System.ComponentModel;

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

Code in view:

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

The output screenshot:

enter image description here

Reference to answer on the asp.net forum

Solution 4 - asp.net Mvc

suppose you need a label with text customername than you can achive it using 2 ways

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

2nd method used a property from your model. If your view implements a model then you can use the 2nd method.

More info please visit below link

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionFabricioView Question on Stackoverflow
Solution 1 - asp.net MvcAnt PView Answer on Stackoverflow
Solution 2 - asp.net MvcCorrugatedAirView Answer on Stackoverflow
Solution 3 - asp.net MvcAlexMelwView Answer on Stackoverflow
Solution 4 - asp.net MvcMahesh ChitrodaView Answer on Stackoverflow