在运行时并根据用户输入创建转发器模板

本文关键字:创建 转发器 输入 用户 运行时 | 更新日期: 2023-09-27 18:36:33

是否可以以某种方式为中继器动态创建ItemTemplate?

我正在尝试使用中继器,因为它允许最多的控制,但我的要求之一是让我重新考虑。

我基本上有许多通过 Web 服务执行的 SQL 查询。我希望他们能够通过单选按钮选择"部件"、"产品"或"包装",在文本框中输入搜索词和其他一些信息,而不是让用户输入整个查询,页面返回他们想要的结果。我已经完成了大部分工作,RadioButtons控制逻辑,并且我已将查询设置为接受文本框中的输入作为带有通配符的搜索词。唯一的问题是我在中继器控制方面苦苦挣扎。问题是每个表都有不同数量的列,并且它们具有不同的名称,因此执行 <td><%# DataBinder.Eval(Container,'"DataItem.Description'") %></td>在 ItemTemplate 中是不可能的(直到绑定时间我才知道要使用 3 个(将来可能会更多)模板中的哪一个)

尝试使用文字根据代码隐藏中的逻辑传入我想要的内容,但我无法传递内联函数,并且我无法根据前面的问题将如何做到这一点放在一起。

我一直在阅读 MSDN 参考,似乎如果我学习 DataList 控件,它会让事情变得更容易,但如果有一种简单的方法可以使用中继器做到这一点,我宁愿不要浪费时间(这也将允许我更多控制)

谢谢

在运行时并根据用户输入创建转发器模板

我可能在这里偏离了轨道,但我认为解决您遇到的问题的简单方法是创建多个中继器控件,其中包含不同的项目模板并将它们包装在面板中。这样,根据用户参数,您只需将结果数据绑定到正确的中继器,并将其他面板设置为不可见。

我正在回顾一些旧代码,看看我如何处理类似的情况。 然后我在写回复之前看到了杰西的回答。 基本上,我倾向于同意杰西的观点——从你概述的内容来看,这似乎是最直接的解决方案。

所以我不知道这有多大帮助,但一种可能性是使用 MVC 模板。MVC 很方便,因为它实际上可以在非常有限的意义上使用(您的整个应用程序不需要实现它,只需适用的页面),而且它也非常简单。

介绍如何在 MVC 中执行不同模板的介绍:http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-1-introduction.html

可以修改模板,使其根据绑定到的对象进行更改 - 就像 WPF 数据模板选择器的工作方式一样。

我想我记得在 MVC3 或 MVC4 中看到了一些东西,您可以基于数据类型创建一个模板(就像在 Silverlight 中一样),它会自动选择该模板,但现在我找不到它。