Конечный результат того, что я пытаюсь сделать, это построить форму динамически, отражая объект и его свойства.
Я создал методы HtmlHelper, которые вызывают TextBoxFor и CheckBoxFor и т. Д., Но теперь мне нужна помощь, чтобы выяснить, как правильно отразить свойство при передаче его в Html.TextBoxFor
Вот вспомогательный метод:
public static MvcHtmlString FormTextBox<TModel>(this HtmlHelper<TModel> helper, String id, String property_name, object model, RouteValueDictionary attributes)
{
Type model_type = model.GetType();
return helper.TextBoxFor(model_object => model_type.InvokeMember(property_name, BindingFlags.ExactBinding | BindingFlags.GetProperty, null, model, null));
}
Но он возвращается при возврате с кодом ошибки:
Шаблоны могут использоваться только с доступом к полю, доступом к свойству, индексом одномерного массива или выражениями настраиваемого индексатора с одним параметром.
В основном я хочу взять то, что было бы это:
@Html.TextBoxFor(model => model.Name)
И превратить это в это:
@FormHelpers.FormTextBox("Name", model)
И пусть он выдаст то же самое.
UPDATE
Я повторю это, поскольку добился определенного прогресса в решении проблемы.
Я создал Expression из Expression.PropertyOrField, который создает именно то, что я ищу. Однако я не могу заставить функцию TextBoxFor принять ее.
Expression fieldExpr = Expression.PropertyOrField(Expression.Constant(model),property_name);
return helper.TextBoxFor(Expression.Lambda<Func<TModel>>(fieldExpr, null).Compile()());
Какие-нибудь идеи о том, как правильно передать выражение в функцию?