Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在运行时根据用户输入创建转发器模板_C#_Asp.net_.net - Fatal编程技术网

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

C# 在运行时根据用户输入创建转发器模板,c#,asp.net,.net,C#,Asp.net,.net,是否有可能以某种方式为中继器动态创建ItemTemplate 我正在尝试使用中继器,因为它允许最多的控制,但我的要求之一是让我重新考虑 我基本上有许多通过web服务执行的SQL查询。我希望用户能够通过单选按钮选择“零件”、“产品”或“包装”,在文本框中输入搜索词和一些其他信息,然后页面返回他们想要的结果,而不是让用户键入整个查询。我已经完成了大部分工作,RadioButtons控制逻辑,并且我已经设置了查询,以接受来自文本框的输入,作为带有通配符的搜索项。唯一的问题是我正在与中继器控制抗争。问题

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

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

我基本上有许多通过web服务执行的SQL查询。我希望用户能够通过单选按钮选择“零件”、“产品”或“包装”,在文本框中输入搜索词和一些其他信息,然后页面返回他们想要的结果,而不是让用户键入整个查询。我已经完成了大部分工作,RadioButtons控制逻辑,并且我已经设置了查询,以接受来自文本框的输入,作为带有通配符的搜索项。唯一的问题是我正在与中继器控制抗争。问题是每个表都有不同的列数和名称,所以
在ItemTemplate中是不可能的(直到绑定时我才知道3个模板中的哪一个(将来可能会更多)要使用)

我尝试使用文字根据codebehind中的逻辑传递我想要的内容,但我无法传递内联函数,并且我无法根据前面的问题总结出如何做到这一点

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


谢谢

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

介绍如何在MVC中使用不同的模板:

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


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

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

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

这非常有效!我尝试在不同的模板周围包装一个
元素,但这并不能阻止它被编译,只能阻止它被显示。我还尝试修改
innerHtml
属性,但也没有成功。这是很多额外的标记,但它似乎工作得很好。知道这会不会导致任何问题吗?因为我从未将其付诸实践,我很想知道中继器在不绑定到数据源的情况下实际生成了多少标记?我可以想象,它最应该泵出将是页眉和页脚,我看不到这是一个问题的道路上。您可以尝试将所有的Repeater.IsEnabled设置为false,然后在运行时只启用您需要的一个,这可能会阻止它们被编译和添加标记,但也不能完全确定。我明天会亲自尝试,并让您知道。实际上,它似乎什么都没有,有一些
class=“AspNetHidden”
的东西,但它看起来像某种输入,而不是表。