Sto tentando di generare un controllo complesso che viene utilizzato nel mio sito Web abbastanza spesso ma con campi diversi. La funzionalità nel controllo è sempre la stessa, sono solo i campi sottostanti che cambiano.Iterazione delle proprietà di un'espressione lambda
Per ottenere il metodo di visualizzazione di campi diversi, sto tentando di creare un'estensione HTMLHelper che accetta un parametro Expression<Func<TModel,TProperty>>
, che conterrà le proprietà di una classe richiesta per la visualizzazione nel controllo. Per esempio:
La vista:
@model Project.Core.Page
@Html.MyHelper(p => new { p.Author.Name, p.Author.Location, p.Author.Age });
E 'l'estensione sto avendo problemi con - come posso scorrere i params forniti nel lambda per fornire ciascuno con un TextBoxFor()
, o anche creare manualmente un input
elemento e popolare con il value
e name
del parametro lambda?
L'extention in 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.???)
}
}
Mi sento come se fossi stato a guardare questo per troppo tempo, e sto anche sentendo c'è un modo più semplice che sto con vista di raggiungere questo.
Qualsiasi aiuto è molto apprezzato. Se hai bisogno di ulteriori dettagli, o ho perso qualcosa di importante, fammi sapere.
Dopo aver riletto la domanda e la mia risposta, mi sono reso conto che il mio primo esempio non poteva gestire l'accesso ai valori di proprietà complesse sul modello. Ho aggiornato il mio esempio di codice per tenere conto di questa situazione. – mclark1129