我正在尝试泛化一个复杂的控件,该控件在我的网站上经常使用,但是使用不同的字段。控件中的功能始终相同,只是底层字段发生了变化。
为了实现显示不同字段的方法,我正在尝试创建一个HTMLHelper扩展,它接受Expression<Func<TModel,TProperty>>
作为参数,其中包含用于在控件中显示所需类的属性。例如:
视图:
@model Project.Core.Page
@Html.MyHelper(p => new { p.Author.Name, p.Author.Location, p.Author.Age });
我遇到的问题是关于扩展的 - 我要如何迭代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.???)
}
}
我觉得我已经盯着这个问题看了太久,而且我感觉还有一种更简单的方法可以实现它。
非常感谢任何帮助。如果需要进一步的细节或者我漏掉了重要的信息,请告诉我。