我试图泛型化一个复杂的控件,该控件在我的网站中经常使用,但使用不同的字段。控件中的功能总是相同的,它只是变化的底层字段。迭代lambda表达式的属性
要实现显示不同字段的方法,我试图创建一个接受Expression<Func<TModel,TProperty>>
作为参数的HTMLHelper扩展,该扩展将包含控件中显示所需的类的属性。例如:
的观点:
@model Project.Core.Page
@Html.MyHelper(p => new { p.Author.Name, p.Author.Location, p.Author.Age });
这是我有问题的扩展 - 我该如何遍历提供PARAMS在lambda提供每一个TextBoxFor()
,甚至手动创建input
元素并使用lambda参数的value
和name
填充它?
在伪进一步扩展:
public static MvcHtmlString MyHelper<TModel,TProperty>(
this HtmlHelper<TModel> helper,
Expression<Func<TModel,TProperty>> expression) {
foreach (var parameter in expression.???) {
// helper.TextBoxFor(???)
// TagBuilder("input").Attributes("name", expression.???)
}
}
我觉得我一直在盯着这个时间太长了,而且我也觉得有我俯瞰实现这一目标的一个更简单的方法。
任何帮助,非常感谢。如果您需要更多详细信息,或者我错过了一些重要的信息,请告诉我。
重新阅读问题和我的回应后,我意识到我的第一个示例无法处理访问模型上复杂属性的值。我已更新我的代码示例以解决这种情况。 – mclark1129