2014-04-10 3 views
4

MVC 4의 초보자입니다. (웹 양식 10 년 이후). 알아낼 수 없었던 질문이 있습니다.cshtml 파일에서 모델 객체 사용

@Html.DisplayNameFor(model => model.City) 

model => model.City은 무엇을 의미 않습니다 다음 cshtml 파일에 코드를 작성하는 경우
, 나는 다음 줄이있는 튜토리얼을 통해 걷고 있어요? @Html.DisplayNameFor(model.City)을 사용할 수없는 이유는 무엇입니까? 이것이 Linq 쿼리라는 것을 알고 있지만, 왜 model goes to model.city이 필요한지 이해하고 싶습니다.

+0

내가 할 수 있기 전에 Selman22가 대답했다. 그러나 비슷한 주제에 대해 더 읽고 싶다면, [Explaining Lambda magic] (http://stackoverflow.com/questions/19720327/html-dropdownlistfor-basic- usage/19720798 # 19720798). –

+0

고마워요 @ 로완. MVC와 EF를 공부할수록 더 혼란 스럽습니다 .-( –

답변

3

일반적으로 lambda expression이라고합니다. 시나리오에서는 이 "이 모델의 표시 요소를 만들고이 속성의 표시 요소를 만듭니다"라는 메시지를 DisplayNameFor에게 말합니다.입니다. model.City은 속성의 값만 반환하기 때문에 사용할 수 없습니다. 속성에 대한 표시 요소를 만들려면 그 이상의 메서드가 필요합니다. 예를 들어, 형식 및 속성 (예 : DisplayName 속성과 같은) 그리고 당신의 요소에 대한 표시 요소를 만듭니다 (그것은 내가 추측하는 레이블이어야합니다).

DisplayName 메서드는 Expression Trees을 사용하여이를 수행하고 있습니다.이 메서드는 Expression<Func<TModel, TValue>>을 사용하고 속성에 대한 이름, 값 및 메타 데이터 정보 (특성)를 가져 오는 데이 메서드를 사용합니다.

당신이 model.City를 사용하려면 여전히 사용할 수 있습니다,하지만 당신은 DisplayNameFor provides.If 방금 속성의 값을 표시하는 데 필요한 기능이처럼 그것을 할 항상 수 필요가 없습니다 :

을 나는 이것을 이해
<label> @model.City </label> 

는이 LINQ query.That 단지 확장 방법이다 아니다, 이것은 잘못된 것입니다 BTW,,

LINQ 쿼리입니다.