2011-12-12 5 views
0

난 강력하게 입력 한 사용자 지정 도우미 (그것은 아무것도하지 않습니다 - 단지 샘플) :MVC3는 : 동적 필드에 의해 정의 도우미에서 강력한 형식의 도우미를 호출 액세스

public static MvcHtmlString MyDisplayFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression 
{ 
    return DisplayExtensions.DisplayFor(htmlHelper, model => metadata.Model); 
} 

그것은 잘 작동,하지만 난 storngly 화장을 원한다 나는 하나의 필드를 추가 할 모델

public static MvcHtmlString MyOtherFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, IList<TProperty>>> expression) 
{ 
    ModelMetadata dataModelMetadata = ModelMetadata.FromLambdaExpression<TModel, IList<TProperty>>(expression, htmlHelper.ViewData); 
    IList<TProperty> modelData = (IList<TProperty>)dataModelMetadata.Model; 
    IEnumerable<ModelMetadata> headModelMetadatas = (new DataAnnotationsModelMetadataProvider()).GetMetadataForProperties(dataModelMetadata.Model, typeof(TProperty)) 


    foreach (var singleData in modelData) 
    { 
    StringBuilder sb = new StringBuilder(); 
     foreach(var headModelMetadata in headModelMetadatas) 
     { 
      sb.Append(
       DisplayExtensions.DisplayFor(htmlHelper, m => singleData) //this gives me all fields displayed by DisplayFor and I want to access single one per call 
       .ToHtmlString()); 
     } 
    } 

} 

내가 코멘트에서 언급 한 바와 같이 각 속성에 대한 내부의 강력한 형식의 도우미와 입력 된 도우미 (이 APPEND는 간단하다, 난 그냥 청소기를 만들기 위해 잘라 거기에 숨겨진 좀 더 코드가있다) 그래서 한 번에 하나의 필드를 얻으려고했다 :

그러나 이것은 단지 오류입니다. 다른 모든 좋은 아이디어, 그것을 해결하기 위해? ;-)

는 편집 :

DisplayExtensions.DisplayFor(htmlHelper, m => singleData.GetType().GetProperty(headModelMetadata.PropertyName).GetValue(singleData, null)) still gives an error 

:하지만

object oValue = singleData.GetType().GetProperty(headModelMetadata.PropertyName).GetValue(singleData, null); 
DisplayExtensions.DisplayFor(htmlHelper, m => oValue) 

작품

나는 몇 가지 시도하고했다! 거의 예상대로 .. 그것은 속성의 각 속성에 대한 표시를 반환합니다. DateTime의 샘플을보십시오 ;-). 도움이 더 필요합니다. 날짜 시간에 대한

샘플 :

Day 
1 
DayOfWeek 
Thursday 
DayOfYear 
335 
Hour 
0 
Kind 
Unspecified 
Millisecond 
0 
Minute 
0 
Month 
12 
Second 
0 
Ticks 
634582944000000000 
TimeOfDay 
00:00:00 
Year 
2011 

답변

0

좋아 난 그냥 단순히 DisplayFor를 사용하지 않고 propertys에 대한

MvcHtmlString.Create(oValue.ToString()).toHtmlString(); 

를 반환했습니다. 그러나 더 많은 phun은 중첩 된 클래스 및 목록으로 시작했습니다. ;-)

어쨌든 저는 제 문제를 해결했습니다.