Jam*_*Orr 6 asp.net viewstate search dynamic
alt text http://img3.imageshack.us/img3/1488/advancedsearch.png
我正在ASP.NET应用程序中构建"高级搜索"界面.我不需要为我写这个东西,但我坚持一个关于动态控件和ViewState的特定问题.我想知道如何处理这个方向.这是我的情况:
配料:
所需的接口功能:
(1)在初始页面加载时,界面获得一个预先配置的Search对象,其中包含一组SearchCriterion对象.它将它们绑定到一组控件中(参见上图).
有些搜索项目更简单,例如:
Field(DropDownList)| 运算符(DropDownList)| 价值(TextBox)
某些字段类型的搜索条件控件具有存储在viewstate中的重要信息,例如:
Field(DropDownList)| 运算符(DropDownList)| 值(DropDownList),其中"值"下拉列表由数据库查询填充.
某些字段是对其他实体的查找,这会导致一系列字段选择器,如:
Field(DropDownList)字段(DropDownList)| 运算符(DropDownList)| 值
(2)用户通过以下方式修改搜索:
(3)最后,用户点击"搜索"以查看他们的结果.
问题:
您可能已经知道如果您正在回答此问题,动态添加到页面的控件将在回发时消失.我已经创建了一个UserControl来操作控件集合并巧妙地完成上面的步骤(1),如附图所示.(显然,我现在并不关心风格.)
但是在Postback上,控件全部消失,我的Search API对象消失了.如果我可以让动态生成的控件集合发挥得很好并坚持使用ViewState,我可以检查回发上的控件,重建Search对象,然后整齐地处理控件事件.
可能的解决方案
我可以使Search对象可序列化并将其存储在viewstate中.然后在页面加载时我可以抓住它并在页面加载时重建控件集合.但是我不确定这是否可以很好地控制引发事件,以及包含数据库数据的下拉列表的视图状态会发生什么 - 我可以把它取回来吗?我不得不在每次回发时重新查询数据库.
我可以为这种事情开发一个自定义服务器控件(请参阅此链接)...但这对我来说是一个新主题,并且会涉及一些学习,而且我不完全确定自定义服务器控件是否可以再工作很好地与非固定控件集合.有人知道吗?
我想我可能能够使用数据绑定控件实现这一点 - 例如,我可以将我的标准集合绑定到具有固定控件集合的转发器(可能隐藏未使用的"值"控件,使用内部转发器"字段"下拉列表).那么所有的信息都会保留在ViewState中......对吗?
任何新的想法将不胜感激.
谢谢你的帮助.b.Fandango
我已经编写了大约一天的代码,并且使用我在问题中建议的第三个选项(老式数据绑定控件)完美地完成了这项工作。事实上,我只是在被迫详细写出问题时才想到这个想法——这种情况不是经常发生在你身上吗?
我将 SearchCriterionControl 放入 asp:Repeater 并将其绑定到我的对象集合。对于字段选择器,我将一个 asp:DropDownList 放入嵌套的 asp:Repeater 中,并将字段数组绑定到它。一切都工作得很好,保持状态,实际上只需要很少的代码。所以我从来不需要向页面动态添加控件,谢天谢地。
感谢安德、马特和安德鲁温的建议。
| 归档时间: |
|
| 查看次数: |
4578 次 |
| 最近记录: |