Разделение MVC Editor для списка объектов

1

Привет, я пытаюсь создать приложение, в котором вы можете создавать формы для регистрации событий и т.д. У меня есть модель Form, которая имеет ICollection of Fields. Поля абстрактны и производят такие вещи, как Checkbox или TextInput и т.д. У меня есть так, что полиморфное поведение работает для моего списка полей, и я могу получить шаблоны EditorFor для каждого типа поля, чтобы я мог делать EditorFor во всем списке, и он будет генерировать список с правильным шаблоном.

Это очень удобно и очень просто с инфраструктурой сущности, но моя проблема в том, что я хочу иметь возможность делать некоторую визуализацию между каждым полем, которое отображается на экране. Поля должны отображаться в сетке строк/столбцов, и каждое поле имеет свойства Row/Size. Единственный способ, которым я понял, как использовать шаблоны EditorFor в списке полей, выглядит следующим образом:

<div class="row">
    @Html.EditorFor(form => form.Fields)
</div>

Но мне нужно иметь какой-то цикл, вместо которого я могу контролировать, где этот шаблон получает визуализацию. Например, они сортируются по строке, поэтому я могу проверить, добавили ли мы еще поля в одну строку или если мне нужно создать новую строку.

Если бы мне пришлось это решить завтра, я бы просто превратил его в статические html-divs, а затем переместил его с помощью jQuery, но я чувствую себя ужасно. Другим способом было бы сохранить текущую строку, в которой мы находимся в представлении, но затем для каждого шаблона поля (например, 12) я бы просто копировал один и тот же логический код...

Любые лучшие идеи будут оценены.

Теги:
razor
asp.net-mvc

2 ответа

1

EditorFor использует Tampletes, которые хранятся в Views/Shared/EditorTemplates. Вы можете определить свои собственные шаблоны для своего типа или переопределить существующие. Проверьте это репо: https://github.com/danmalcolm/mvc-razor-display-and-editor-templates/tree/master/src/DemoMvcApp/Views/Shared/EditorTemplates

Я думаю, что в вашем случае вы хотите переопределить Object.cshtml. Например: https://github.com/danmalcolm/mvc-razor-display-and-editor-templates/blob/master/src/DemoMvcApp/Views/Shared/EditorTemplates/Object.cshtml Я прав?

  • 0
    Нет, у меня уже есть правильные шаблоны редактора для моих производных типов, которые правильно отображаются для правильного типа поля. Проблема в том, что мне не нужно отображать весь список полей из шаблонов одновременно. Мне нужно иметь возможность визуализировать только один шаблон EditorFor, затем выполнить некоторую логику, а затем сделать следующий шаблон.
  • 0
    Итак, вам нужен шаблон редактора для вашего списка?
Показать ещё 2 комментария
0

Моим временным решением было просто зациклиться на строках в моем главном представлении. Я сохраняю текущий указатель строки в ViewBag, а затем в шаблонах редактора я проверяю, является ли Model.Row == ViewBag.CurrRow. Мне это не очень нравится, потому что я буду перебирать все шаблоны для полей для каждой строки, которая у меня есть.

Я думаю, что постоянным решением будет пользовательский ViewModel, который имеет поля, разделенные на строки, поэтому у меня может быть шаблон редактора для каждой строки.

Я также выяснил, что редактор ForFor на Model.Fields фактически не вызывает редактор EditorFor во всех полях, он вызывает его на типе ICollection, который, в свою очередь, вызывает шаблоны редактора полей. Поэтому я уверен, что могу просто создать свой собственный ICollection EditorTemplate с логикой Row, в которой я нуждаюсь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню