2

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

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

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

我尝试使用文字根据代码隐藏中的逻辑传递我想要的内容,但我无法传递内联函数,并且我无法根据之前的问题汇总如何执行此操作。

我一直在阅读 MSDN 参考资料,如果我学习 DataList 控件,它似乎会让事情变得更容易,但如果有一个简单的方法可以使用中继器(这也将允许我更多控制)

谢谢

4

3 回答 3

2

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

于 2012-06-06T20:21:33.000 回答
2

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

于 2012-06-06T20:06:28.953 回答
1

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

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

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

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

于 2012-06-06T20:06:16.447 回答