Я создал расширение htmlhelper, чтобы уменьшить количество повторяющихся разметок при создании форм:
public static MvcHtmlString RenderField<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression)
{
return htmlHelper.DisplayFor(expression, "formfield");
}
Идея заключается в том, что внутри моих представлений я могу просто написать @Html.RenderField(x=>x.MyFieldName)
, и он напечатает метку и содержимое поля с соответствующими тегами div
на месте.
Внутри папки displaytemplates я создал formfield.cshtml, содержащий следующее:
<div class="display-group">
<div class="display-label">
@Html.LabelFor(x => x)
</div>
<div class="display-field">
@Html.DisplayFor(x => x)
</div>
</div>
К сожалению, не представляется возможным вложить DisplayFor в шаблон отображения (он ничего не отображает). Я не хочу просто использовать @Model
, потому что тогда я не получу флажки для логических значений, элементы управления календарем для дат и т. Д.
Есть ли хороший способ обойти это?