Estoy tratando de genéricos un control complejo que se utiliza en mi sitio web con bastante frecuencia pero con diferentes campos. La funcionalidad en el control es siempre la misma, solo cambian los campos subyacentes.Iteración de las propiedades de una expresión lambda
Para lograr el método de mostrar diferentes campos, intento crear una extensión HTMLHelper que acepte un Expression<Func<TModel,TProperty>>
como parámetro, que contendría las propiedades de una clase requerida para mostrar en el control. Por ejemplo:
La vista:
@model Project.Core.Page
@Html.MyHelper(p => new { p.Author.Name, p.Author.Location, p.Author.Age });
Es la extensión que estoy teniendo problemas con - ¿cómo puedo iterar sobre los parametros proporcionados en el lambda para proporcionar cada uno con un TextBoxFor()
, o incluso crear manualmente una input
elemento y llenarlo con value
y name
del parámetro lambda?
La extensión de pseudo:
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.???)
}
}
me siento como si hubiera estado mirando en esto por mucho tiempo, y yo también siento que hay una manera más sencilla que estoy con vistas a la consecución de este.
Cualquier ayuda es muy apreciada. Si necesita más detalles, o me he perdido algo importante, hágamelo saber.
Después de volver a leer la pregunta y mi respuesta, me di cuenta de que mi primer ejemplo no podía manejar el acceso a valores de propiedades complejas en el modelo. He actualizado mi ejemplo de código para dar cuenta de esta situación. – mclark1129