使用 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
转换为 UserControl
或 TrueFalse
(加载的用户控件的类型),但都转换为 null。
我需要传递一个包含信息的对象供控件显示。例如,在本例中,问题是 True/False 问题,因此模板将传递一个 Question
对象,其中包含问题文本以及答案是真还是假。还会有其他问题类型,例如多项选择题、简答题等。每种问题都需要使用不同的模板来显示。如何将信息传递给 ListView
中的那个 ItemTemplate
?
我一直在使用 this solution 根据数据类型更改模板。我可以根据数据的类型显示不同的模板;我只是不知道如何在向模板传递数据时将模板加载为列表视图项。
Through this blog post,我发现秘诀其实就在检索绑定项,在列表视图的情况下,是ListViewDataItem
。
这行代码,在用户控件中,将检索绑定到 ItemTemplate
的数据并将其添加到页面(在我的例子中,它是我需要的 Question
对象访问):
((Question)(DataBinder.GetDataItem((ListViewDataItem)Container))).WhateverProperty
当然,这个前端代码被包围在 <%# ... %>
标签中。
我需要根据对象的类型将模板加载到 ASP.NET ListView
。但是,我需要在加载它之前将参数传递给 ItemTemplate
。加载到列表视图中的项目模板是一个 .ascx
用户控件。
ITemplate template = Page.LoadTemplate("~/Controls/Questions/TrueFalse.ascx");
listView.ItemTemplate = template;
我试过将 template
转换为 UserControl
或 TrueFalse
(加载的用户控件的类型),但都转换为 null。
我需要传递一个包含信息的对象供控件显示。例如,在本例中,问题是 True/False 问题,因此模板将传递一个 Question
对象,其中包含问题文本以及答案是真还是假。还会有其他问题类型,例如多项选择题、简答题等。每种问题都需要使用不同的模板来显示。如何将信息传递给 ListView
中的那个 ItemTemplate
?
我一直在使用 this solution 根据数据类型更改模板。我可以根据数据的类型显示不同的模板;我只是不知道如何在向模板传递数据时将模板加载为列表视图项。
Through this blog post,我发现秘诀其实就在检索绑定项,在列表视图的情况下,是ListViewDataItem
。
这行代码,在用户控件中,将检索绑定到 ItemTemplate
的数据并将其添加到页面(在我的例子中,它是我需要的 Question
对象访问):
((Question)(DataBinder.GetDataItem((ListViewDataItem)Container))).WhateverProperty
当然,这个前端代码被包围在 <%# ... %>
标签中。