В ответ на ваше обновление о создании индексов вместо идентификаторов GUID в исходной связанной статье было несколько комментариев от других, которые пытались решить эту проблему, но ни один из них не помог мне. Я обнаружил, что на коллекцию с индексом ссылались в следующем месте:
html.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix
Итак, я написал вспомогательную функцию для анализа индекса (и если возникнет проблема, будет сгенерирован GUID)
public static string GetCollectionItemIndex(this HtmlHelper html, string collectionName)
{
int idx;
string sIdx;
if (Int32.TryParse(Regex.Match(html.ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix, @"\d+").Value, out idx))
{
sIdx = idx.ToString();
}
else
{
sIdx = Guid.NewGuid().ToString();
}
return sIdx;
}
Я отредактировал функцию BeginCollectionItem (..), чтобы вызвать эту вспомогательную функцию при установке индекса элемента:
string itemIndex = idsToReuse.Count > 0 ? idsToReuse.Dequeue() : GetCollectionItemIndex(html, collectionName);
Надеюсь, это поможет кому-то еще!