使用 Page.LoadTemplate 并传递参数

Use Page.LoadTemplate and Pass Parameters

我需要根据对象的类型将模板加载到 ASP.NET ListView。但是,我需要在加载它之前将参数传递给 ItemTemplate。加载到列表视图中的项目模板是一个 .ascx 用户控件。

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

我试过将 template 转换为 UserControlTrueFalse(加载的用户控件的类型),但都转换为 null。

我需要传递一个包含信息的对象供控件显示。例如,在本例中,问题是 True/False 问题,因此模板将传递一个 Question 对象,其中包含问题文本以及答案是真还是假。还会有其他问题类型,例如多项选择题、简答题等。每种问题都需要使用不同的模板来显示。如何将信息传递给 ListView 中的那个 ItemTemplate

我一直在使用 this solution 根据数据类型更改模板。我可以根据数据的类型显示不同的模板;我只是不知道如何在向模板传递数据时将模板加载为列表视图项。

Through this blog post,我发现秘诀其实就在检索绑定项,在列表视图的情况下,是ListViewDataItem

这行代码,在用户控件中,将检索绑定到 ItemTemplate 的数据并将其添加到页面(在我的例子中,它是我需要的 Question 对象访问):

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

当然,这个前端代码被包围在 <%# ... %> 标签中。