[asp.net-mvc] Html.Label, Html.LabelFor 및 Html.LabelForModel의 차이점은 무엇입니까?

@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.Label -생성자에 전달 된 문자열이 무엇이든간에 레이블 태그를 만듭니다.

Html.LabelFor-특정 속성에 대한 레이블을 만듭니다. 이것은 강력한 형식입니다. 기본적으로 이것은 속성의 이름 만 수행합니다 (아래 예에서는 해당 Display 속성이없는 경우 MyProperty를 출력합니다). 이것의 또 다른 이점은 모델에서 디스플레이 속성을 설정할 수 있다는 것입니다.

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>. 이것은 훌륭하게 작동하므로 해당 속성의 레이블이 무엇인지 한곳에서 정의하고 모든 곳에 표시 할 수 있습니다.


답변

의 사용법에 @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 포럼에 대한 답변 참조


답변

두 가지 방법을 사용하여 얻을 수있는 것보다 텍스트 customername이있는 레이블이 필요하다고 가정하십시오.

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

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

두 번째 방법은 모델의 속성을 사용했습니다. 뷰가 모델을 구현하는 경우 두 번째 방법을 사용할 수 있습니다.

자세한 정보는 아래 링크를 방문하십시오

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


답변