У меня есть элемент управления выпадающим списком.
<asp:DropDownList runat = "server" ID = "ddlMarketerContract" CssClass = "form-control" />
Я установил DataSource в коде программной части, используя LINQ и EF.
ddlMarketerContract.DataSource = context.Table.Select(x => x.ColumnName).Distinct().ToList();
Но при выполнении отладки, когда я перехожу к привязке данных
ddlMarketerContract.DataBind();
Я получаю сообщение об ошибке «Ссылка на объект не указывает на экземпляр объекта».
Не уверен, почему он позволяет мне установить DataSource, но не находит объект при привязке элемента управления.
У меня есть аналогичная настройка на другой странице, но она работает так, как ожидалось. Я подумал, может быть, это потому, что у меня нет набора DataTextField/DataValueField, но на другой странице их не было, и он все еще работал нормально.
Да, LINQ возвращает нужный набор данных. Во время отладки, после настройки источника данных, если я разверну элемент управления раскрывающимся списком и посмотрю на его источник данных, я увижу около 35 результатов. Это не сразу. Я установил источник данных нескольких раскрывающихся списков в блоке «Использование», а затем привязал их после закрытия блока. Однако я попытаюсь переместить команду связывания в блок сразу после установки источника данных.
Перемещение команды DataBind прямо под строкой набора DataSource не сработало. Я также выполнил такие проверки, как если (ddlMarketerContract != null) и если (ddlMarketerContract.DataSource != null), и обе они вернули true, поэтому элемент управления и источник данных присутствуют. Я не уверен, что он говорит, что нет никаких возражений.
Можете ли вы опубликовать весь метод жизненного цикла, который вы используете?
После того, как я уберу настройку и привязку других раскрывающихся списков, выше действительно все, что касается элемента управления. В событии Page_Load я объявляю Using, чтобы открыть контекст, затем устанавливаю источник данных с помощью LINQ, закрываю Using, затем связываю данные
Трудно сказать, в чем проблема, но, возможно, попробуйте выполнить привязку к некоторым фиктивным данным с помощью базового List<string>
, чтобы посмотреть, сможете ли вы определить, связана ли проблема с привязкой данных или с EF.
Я думаю, что это как-то связано с набором данных. Когда я устанавливаю набор данных для всей таблицы и устанавливаю DataTextField/DataValueField для имени столбца, он работал. Это просто не имеет смысла, когда на другой странице я не устанавливаю DataTextField/DataValueField и устанавливаю источник данных на отдельные значения из столбца, чтобы вернуть список строк, и это работает.
Хорошо, похоже, это оператор LINQ. Мне удалось привязать элемент управления к новому List<string> {[values]}. Единственная нечетная часть заключается в том, что оператор LINQ является копией/вставкой оператора LINQ на других страницах, который отлично работает.
Проблема была с оператором LINQ. После создания общего списка строковых значений я смог просто связать элемент управления. Изменит запрос LINQ, чтобы решить проблему.
Вы уверены, что для DataSource задан список, который вы ожидаете? Можем ли мы увидеть код с немного большим контекстом? Вы вызываете DataBind сразу после DataSource?