gpt4 book ai didi

asp.net - 在 ASP.NET 中构建动态 "Advanced Search"控件的建议

转载 作者:行者123 更新时间:2023-12-04 14:07:36 26 4
gpt4 key购买 nike

alt text http://img3.imageshack.us/img3/1488/advancedsearch.png

我正在 ASP.NET 应用程序中构建“高级搜索”界面。我不需要 SO 为我写这个东西,但我被困在一个关于动态控件和 ViewState 的特定问题上。我想知道如何解决这个问题。这是我的情况:

配料:

  • 一组可服务的 API 对象,表示实体、字段和搜索,用于处理构建搜索、生成 SQL 并返回结果。所以这一切都得到了照顾。
  • ASP.NET 3.5

  • 所需的接口(interface)功能:

    (1) 在初始页面加载时,界面获取一个带有一组 SearchCriterion 对象的预配置 Search 对象。它将它们绑定(bind)到一组控件中(参见上图。)
  • 一些搜索项更简单,例如:

    字段 (DropDownList) |运算符 (DropDownList) |值(文本框)
  • 某些字段类型的搜索条件控件具有存储在 View 状态中的重要信息,例如:

    字段 (DropDownList) |运算符 (DropDownList) |值 (DropDownList),其中“值”下拉列表由数据库查询填充。
  • 有些字段是对其他实体的查找,这会导致一系列字段选择器,例如:

    字段 (DropDownList) 字段 (DropDownList) |运算符 (DropDownList) |值(value)

  • (2) 用户通过以下方式修改搜索:
  • 通过单击相应按钮添加和删除搜索条件
  • 通过更改字段、运算符或值来配置现有条件。对字段或运算符的更改将要求控件通过更改可用运算符、将“值”输入控件更改为不同类型或在“字段”部分添加/删除下拉列表来重新配置自身(如果选择/取消选择查找类型字段) .

  • (3) 最后,用户点击“搜索”来查看他们的结果。

    问题:

    如果您正在回答这个问题,您可能已经知道,动态添加到页面的控件会在回发时消失。我创建了一个 UserControl 来操作控件集合并巧妙地完成上面的步骤 (1),如您在所附图像中所见。 (显然,我现在并不关心风格。)

    但是在 Postback 上,控件都消失了,我的 Search API 对象也消失了。如果我能让动态生成的控件集合正常运行并坚持 ViewState,我可以在回发时检查控件,重建 Search 对象,然后巧妙地处理控件事件。

    可能的解决方案
  • 我可以使 Search 对象可序列化并将其存储在 View 状态中。然后在页面加载时我可以抓取它并在页面加载时重建控件集合。但是我不确定这是否可以很好地与引发事件的控件一起使用,以及包含数据库数据的下拉列表的 View 状态会发生什么 - 我可以取回它吗?我非常不希望每次回发都重新查询数据库。
  • 我可以为这种事情开发一个自定义服务器控件( see this link )......但这对我来说是一个新主题,需要一些学习,另外我不完全确定自定义服务器控件是否可以工作与非固定控件集合很好。有人知道吗?
  • 我在想我可能能够使用数据绑定(bind)控件来完成此操作 - 例如,我可以将我的标准集合绑定(bind)到具有固定控件集合的转发器(可能隐藏未使用的“值”控件,使用内部转发器) “字段”下拉列表)。那么所有信息都将保留在 ViewState 中……对吗?
  • 任何新的想法将不胜感激。

  • 谢谢你的帮助。
    b.凡丹戈

    最佳答案

    我已经编写了大约一天的代码,并且使用我在问题中建议的第三个选项 - 老式数据绑定(bind)控件,我得到了很好的工作。其实我是在被迫详细写出问题时才想到的——这不是一直都发生在你身上吗?

    我将我的 SearchCriterionControl 放入 asp:Repeater 并将其绑定(bind)到我的对象集合。对于字段选择器,我在嵌套的 asp:Repeater 中放置了一个 asp:DropDownList 并将字段数组绑定(bind)到它。一切都很好,保持状态,实际上只需要很少的代码。所以我从来不用动态地向页面添加控件,谢天谢地。

    感谢您的建议,安德、马特和安德鲁温。

    关于asp.net - 在 ASP.NET 中构建动态 "Advanced Search"控件的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1406134/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com