我有强类型的自定义助手(它什么都不做 - 只是样本):
public static MvcHtmlString MyDisplayFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression
{
return DisplayExtensions.DisplayFor(htmlHelper, model => metadata.Model);
}
它工作得很好,但是我想要一个make storngly类型的帮助器,里面有强类型的帮助器,用于Model的每个属性
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());
}
}
}
正如我在评论中提到的,我想要附加单个字段(这个附加很简单,还有一些隐藏的代码,我只是为了使它更干净而切割)所以我试着在时间上得到一个字段:
DisplayExtensions.DisplayFor(htmlHelper, m => singleData.GetType().GetProperty(headModelMetadata.PropertyName))
但这给了我一个错误。 任何其他好主意,解决它? ; - )
编辑:
我做了一些尝试并且:
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的样本;-)。需要更多帮助。
示例,适用于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 :(得分:0)
好的,我只是简单地回来了
MvcHtmlString.Create(oValue.ToString()).toHtmlString();
对于不使用DisplayFor的属性。但更多的phun从嵌套类和列表开始..; - )
无论如何我解决了我的问题。