У меня есть коллекция объектов в моей модели, которые я отображаю в представлении с помощью функции 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 коллекции отсутствуют?
Существуют ли связующие модели, которые решают эту проблему?
MyCollection.Index
с индексом в качестве значения. - person Joel Purra   schedule 03.04.2012