在ASP.NET中构建动态“高级搜索”控件的建议
alt text http://img3.imageshack.us/img3/1488/advancedsearch.png
我正在ASP.NET应用程序中构建“高级搜索”界面.我不需要为我写这个东西,但我坚持一个关于动态控件和ViewState的特定问题.我想知道如何处理这个方向.这是我的情况: 配料: >一组可维护的API对象,表示实体,字段和搜索,用于处理构建搜索,生成SQL和返回结果.所以这一切都得到了照顾. 所需的接口功能: (1)在初始页面加载时,界面获得一个预先配置的Search对象,其中包含一组SearchCriterion对象.它将它们绑定到一组控件中(参见上图). >有些搜索项目更简单,例如: Field(DropDownList)|运算符(DropDownList)|价值(TextBox) Field(DropDownList)|运算符(DropDownList)|值(DropDownList),其中“值”下拉列表由数据库查询填充. Field(DropDownList)字段(DropDownList)|运算符(DropDownList)|值 (2)用户通过以下方式修改搜索: >单击相应按钮添加和删除搜索条件 (3)最后,用户点击“搜索”以查看他们的结果. 问题: 您可能已经知道如果您正在回答此问题,动态添加到页面的控件将在回发时消失.我已经创建了一个UserControl来操作控件集合并巧妙地完成上面的步骤(1),如附图所示. (显然,我现在并不关心风格.) 但是在Postback上,控件全部消失,我的Search API对象消失了.如果我可以让动态生成的控件集合发挥得很好并坚持使用ViewState,我可以检查回发上的控件,重建Search对象,然后整齐地处理控件事件. 可能的解决方案 >我可以使Search对象可序列化并将其存储在viewstate中.然后在页面加载时我可以抓住它并在页面加载时重建控件集合.但是我不确定这是否可以很好地控制引发事件,以及包含数据库数据的下拉列表的视图状态会发生什么 – 我可以把它取回来吗?我不得不在每次回发时重新查询数据库. 谢谢你的帮助. 解决方法
我已经编写了大约一天的时间,并且使用我在我的问题中提出的第三个选项 – 老式的数据绑定控件,让我的工作非常漂亮.实际上,当我不得不详细地写出这个问题时,我才想到了这个想法 – 这不是一直发生在你身上吗?
我将我的SearchCriterionControl放入一个asp:Repeater并将其绑定到我的对象集合.对于Field Chooser,我在嵌套的asp:Repeater中放置了一个asp:DropDownList,并将Field数组绑定到该数组.一切都很好,保持状态,实际上只需要很少的代码.所以我从来没有动态添加控件到页面,谢天谢地. 感谢您的建议,Ender,Matt和andrewWinn. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – Identity和自定义表之间的多对多关系. EF7 – 代
- asp.net-mvc-3 – 可用会员入门套件/成员资料用于ASP.NET M
- 如何在ASP.NET中将文本框的宽度设置为与MaxLength相同
- asp.net – PipeLine模式和池标识是否会影响使用Integrated
- asp.net-mvc – 使用哪种FormsAuthentication方法?
- asp.net – 实体框架4.0扩展和安全
- asp.net – 压缩不起作用
- ASP.NET MVC jQuery自动完成HtmlHelper
- asp.net – 向GridView添加默认排序箭头
- ASP.NET linq选择多个连接