2011-02-23 5 views
3

내보기에서이 데이터 형식에 대한 사용자 지정 편집기 템플릿을 트리거하는 Html.EditFor()를 호출합니다. 또한 나는 몇 가지 메타 데이터를 전달 (그리고 내가 싫어하는 부분) :ModelMetaData : "부모"- 메타 데이터를 얻는 방법?

<% ModelMetadata metaTitle = ModelMetadataProviders.Current.GetMetadataForProperty(null, Model.GetType(), "Title"); %> 
<%: Html.EditorFor(x => Model.Title, new { metaData = metaTitle })%> 

건네 유형 (속성 제목) 타입의 '번역'이다. 사용자 정의 편집기 템플릿 내에서 나는 그것을 사용하기 위해을 ViewData에서 전달 된 메타 데이터를 읽을 수있다 : 나는 사용자 정의 편집기 템플릿에서 직접 메타 데이터에 액세스 할 수있는 몇 가지 방법은

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Translation>" %> 
// {...} 
if (ViewData["metaData"] != null) 
    metaData = (ModelMetadata)ViewData["metaData"]; 

있습니까?

ModelMetadata metaData = ModelMetadataProviders.Current.GetMetadataForType(null, Model.GetType()); 

I : 나는 편집기 템플릿 내에서 다음을 호출하는 경우 불행하게도, 나는 같은 메타 데이터 오브젝트 (예 : 제목 - 속성이 필요하거나하지 않은 경우 정보가 누락)를받지 않습니다 각 호출마다 메타 데이터 개체를 전달하지 않으려합니다.

모든 tipp에 Thx! sl3dg3

답변

7

난 당신이 EditorTemplate의 실제 속성에 대한 메타 데이터를 얻기 위해 노력하고 생각합니다.

이 있습니다 (EditorTemplate 내부)과 같이이 작업을 수행 할 수 있습니다

var metadata = ModelMetadata.FromStringExpression("", ViewData); 

"는"MVC의 현재 속성을 의미한다. 파티에 늦게

+0

당신은 절대적으로 옳았습니다. 그것은 제가 찾고 있던 것이 었습니다. 마침내 그것을 검증 할 수있었습니다. – sl3dg3

+0

+1 - 좋은 찾기 ...이 API는 매우 강력하지만 직관적이지 않습니다. –

5

당신은 부모 메타 데이터에 액세스하려면 다음을 시도 할 수 :

<% 
    var parentType = this.ViewData.ModelMetadata.ContainerType; 
    var metadata = ModelMetadataProviders.Current.GetMetadataForType(null, parentType); 
%> 
+0

좋은 점 부모 viewModel (좋아, 내 제목 어쩌면 missleading). 하지만 'ParentModel.Title'의 메타 데이터를 원합니다. 여기서는 편집기 템플릿 내에서 속성의 이름을 모른다는 것입니다 ... – sl3dg3

+0

@ sl3dg3, 이름을 모르는 경우 편집기 템플릿 안의 속성은 어떻게 가치를 얻을 것으로 기대합니까? –

0

틀림없이 조금, 그러나 현재의 모델에 대한 모델 메타 데이터를 얻을 수있는 간단한 방법이있다 - 그것은 property of ViewData A와 존재합니다 -하지만 지금은의 메타 데이터가

var metadata = ViewData.ModelMetadata; 
관련 문제