Используйте Page.LoadTemplate и параметры передачи - PullRequest
0 голосов
/ 08 февраля 2020

Мне нужно загрузить шаблон в ASP. NET ListView в зависимости от типа объекта. Однако мне нужно передать параметры этому ItemTemplate перед его загрузкой. Шаблон элемента, который загружается в представление списка, является .ascx пользовательским элементом управления.

ITemplate template = Page.LoadTemplate("~/Controls/Questions/TrueFalse.ascx");
listView.ItemTemplate = template;

Я пробовал кастовать template как UserControl или TrueFalse (тип загружаемого пользовательского элемента управления), но оба преобразуются в ноль.

Мне нужно передать объект с информацией для отображения элемента управления. Например, в этом случае вопрос является вопросом True / False, поэтому шаблону будет передан объект Question, который содержит текст вопроса плюс, является ли ответ истинным или ложным. Будут другие типы вопросов, такие как множественный выбор, короткий ответ и т. Д. c. Каждый из них должен отображаться с другим шаблоном. Как передать информацию этому ItemTemplate в ListView?

Я использовал это решение для изменения шаблонов в соответствии с типом данных. Я могу отображать различные шаблоны в зависимости от типа данных; Я просто не знаю, как загрузить шаблон в виде элемента списка при передаче ему данных.

1 Ответ

0 голосов
/ 08 февраля 2020

В этом сообщении в блоге я обнаружил, что секрет на самом деле заключается в извлечении связанного элемента, который в случае представления списка составляет ListViewDataItem.

Эта строка В пользовательском элементе управления code извлекает данные, привязанные к ItemTemplate, и добавляет их на страницу (в моем случае это объект Question, к которому мне нужно было получить доступ):

((Question)(DataBinder.GetDataItem((ListViewDataItem)Container))).WhateverProperty

Этот интерфейсный код, конечно же, заключен в теги <%# ... %>.

...