Выходные параметры, не читаемые при использовании с DataReader

К сожалению, @Html.DropDownListFor() ведет себя несколько иначе, чем другие помощники при рендеринге элементов управления в цикле. Об этом ранее сообщалось как о проблеме с CodePlex (не уверен, что ее ошибка или просто ограничение)

. Это 2 варианта для решения этой проблемы, чтобы обеспечить выбор правильной опции на основе свойства модели

Вариант 1 (с использованием EditorTemplate)

Создайте пользовательский EditorTemplate для типа в коллекции. Создайте парциальное значение в /Views/Shared/EditorTemplates/AggregationLevelConfiguration.cshtml (обратите внимание, что имя должно соответствовать имени типа

@model yourAssembly.AggregationLevelConfiguration
@Html.DropDownListFor(m => m.HelperCodeType, (SelectList)ViewData["CodeTypeItems"])
.... // other properties of AggregationLevelConfiguration

, а затем в главном представлении передать SelectList в EditorTemplate как additionalViewData

@using (Html.BeginForm())
{
  ...
  @Html.EditorFor(m => m.Configurations , new { CodeTypeItems = Model.CodeTypeItems })
  ...

Вариант 2 (сгенерируйте новую SelectList на каждой итерации и установите selectedValue)

В этом параметре ваше свойство CodeTypeItems должно быть IEnumerable<GenericIdNameType>, а не SelectList (или просто сделать codeTypes общедоступным свойством). Затем в главном представлении

@Html.DropDownListFor(m => m.Configurations[0].HelperCodeType, new SelectList(Model.CodeTypeItems, "Id", "Name", Model.Configurations[0].HelperCodeType)

Сторона примечания: нет необходимости использовать new { id = "Configurations[0].HelperCodeType" - метод DropDownListFor() уже сгенерированный атрибут id

10
задан Tim B 9 December 2015 в 12:13
поделиться

1 ответ

Это происходит из-за "дизайном" природа DataReaders. Любые параметры отмечены как ParameterDirection.Output не будет "заполнено", пока DataReader не был закрыт. В то время как все еще открытый, все Выходные параметры больше, чем, вероятно, просто возвратятся null.

Полная статья Microsoft KB относительно этого может быть просмотрена здесь.

16
ответ дан 3 December 2019 в 22:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: