난 강력하게 입력 한 사용자 지정 도우미 (그것은 아무것도하지 않습니다 - 단지 샘플) :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