У меня есть коллекция объектов в моей модели, которую я рендерил в виде с помощью функции EditFor, и у меня есть EditorTemplate, который отвечает за фактическое отображение каждого объекта.
@Html.EditorFor(model => model.MyObjects)
Это имеетНекоторое время работал хорошо, и когда вы проверяете html, мои текстовые поля начинаются с префикса со свойством модели, за которым следует индекс коллекции, из которой они получены.
<input class="text-box single-line" id="MyObjects_2__SomeProperty"
name="MyObjects[2].SomeProperty" type="Text" value="" />
Однако я недавно началиспользуя свойства ShowForEdit и ShowForDisplay в метаданных модели для коллекции и в первой строке моего шаблона редактора, если ShowForEdit не соответствует действительности, я просто пропускаю его.
@if (!ViewData.ModelMetadata.ShowForEdit)
{
return;
}
Но поскольку все они проиндексированыв html, когда я пытаюсь сохранить эту коллекцию обратно в модель представления с помощью обратной передачи, она завершается ошибкой из-за зависимости от номеров индексации.Каждый элемент в коллекции после отсутствующего индекса отсутствует в моей модели представления, когда я проверяю его значение.
В данном случае это фактически мой первый элемент в коллекции, который я пропускаю, поскольку не хочу егобыть видимым в представлении редактирования, но из-за этого, когда я отправляю обратно, первый индекс в html равен 1 (вместо 0, как это обычно бывает), но это проблема, когда вы пытаетесь сохранить изменения.Это также проблема при изменении DOM с использованием javascript.
Кто-нибудь еще сталкивался с проблемой способности связывателя модели по умолчанию читать данные, отправленные обратно, когда один или несколько индексов в представленной коллекции html отсутствуют?
Существуют ли модельные связующие, которые решают эту проблему?