我試圖泛型化一個複雜的控件,該控件在我的網站中經常使用,但使用不同的字段。控件中的功能總是相同的,它只是變化的底層字段。迭代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