alt文本http://img3.imageshack.us/img3/1488/advancedsearch.png

我要建一个"高级搜索"接口中的一个ASP.NET 应用程序。我不需要那么写这个东西对我来说,但我被困在一个特定的问题上的有关动态的控制和视图状态中。我想一些方向如何处理这个。这是我的情况:

成分:

  • 一个可维修的组API物体的代表实体、字段,并搜索,它处理建设一个搜索,产生SQL和返回的结果。所以这就是所有的照顾。
  • ASP.NET 3.5

所需的接口功能:

(1)在最初的页面负荷,将界面得到一个预先配置的搜索目的与一组SearchCriterion的对象。它结合到一定的控制(见图像上。)

  • 一些搜索项目简单,如:

    领域(下拉列表)|操作员(下拉列表)|价值(框)

  • 搜索标准控制一些领域的类型具有重要的信息存储在视图状态,如:

    领域(下拉列表)|操作员(下拉列表)|价值(下拉列表)中的"价值"下拉列表中填充数据库查询。

  • 某些字段的查找到的其他实体,这会导致一个链的领域选择,如:

    领域(下拉列表)领域(下拉列表)|操作员(下拉列表)|价值

(2)用户修改的搜索:

  • 添加和去除的搜索标准,通过点击相应的按钮
  • 配置现有的标准,通过改变的领域,操作者,或者价值。变化领域或操作员将需要控制来重新配置其自身,通过改变提供运营商、改变"价值"的输入控制不同类型,或加入/消除DropDownLists从的"领域"一节,如果查询类型的领域是选定的/未选择。

(3)最后用户命"搜索"见到他们的结果。

问题:

因为你可能已经知道如果你回答这个问题,控制加入动态的网页上消失回发。我已经创建了一个用户控件,操纵控制收集和整齐完成的步骤(1)如上面你可以看到在所附的图像。(我是不关心有关的风格在这一点上,很明显。)

然而在回发、控制都走了,我的搜索API目的是消失了。如果我可以获得动态生成的控制收集到的只是玩玩好,并坚持在视图状态,我可以审查控制在回发,重建搜寻的对象,然后处理的控制活动整齐。

可能的解决方案

  • 我可以做的搜索对象的序列化并将其存储在视图状态中。然后在页载我可以抓住它并重建控制的集合在页面负载时间。但是我不确定这会很好地发挥与控制,提高活动,并发生了什么样的视图状态中的下拉菜单,包含来自数据库的数据-我能把它找回来?这是非常不希望我重新查询的数据库对每一个回发。

  • 我可以研发定制服务器的控制(看到这个的链接)对于这种事情...但是,这是一个新的主题对于我和将涉及一些学习,再加上我不能完全确定,如果一个自定义的服务器控制工作的任何更好地与非固定控制的集合。任何人,知道吗?

  • 我在想,我可能能够完成这一使用数据绑定的控制--例如,我可以结合我的准则汇集到一个中继器,它具有固定的控制收(也许隐藏的非利用"价值"的控制,使用内部转发器的"领域"下清单)。然后所有的信息将留在视图状态...对吗?

  • 任何新的想法,将不胜感激。

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

有帮助吗?

解决方案

我已经编码约一天我得到了这个工作精美的使用的第三个选择,我建议在我的问题-老学校的数据绑定的控制。实际上我只想知道当我是被迫写出这个问题的细节-不,只是发生在你身上所有的时间?

我把我的SearchCriterionControl成asp:中继器和结到我的目的收集。对于领域的选择我把asp:下拉列表内嵌套asp:中继器和定领域列。一切精美的作品,保持状态,实际上需要非常小的代码。所以我从来没有以动态的增加控制的网页,谢天谢地。

谢谢你的建议,安德马特和andrewWinn.

其他提示

由于没有其他人采取一刀在这2小时,我会扔我的帽子在环的解决方案,不依赖于视图状态,在所有(或ASP.NET 模型的回发).

如果你抓住所有的输入值字,而不是做一个后背没有一个员额抵页(或者一个新的结果。aspx页)?或者你可以做整个事情是异步和做Ajax请求对一个网络的方法,获得馈的结果,并填入对客户的侧为需要?

不幸的事情这里是你要重建这种类型的管制用于图建造你的搜索查询,因为这些数据不会被通过与视图状态中。但我想你已经要做某种翻译的数据输入查询的形式。

阅读 在这里, 有关的详细信息使用jQuery打一个ASP.NET 网页的方法。记得页的方法必须是静态的(这是一个简单的监督).

我不知道你在做什么服务器的一侧建造查询中-但是我会 高度 让皇宫.我做了一个类似的"高级搜索"功能之前和之后的几个不同的尝试找到那皇宫是一个好的工具,对于这个问题,不论是否我打SQL与LINQtoSQL或只是打一个存储器收集的对象。

这个工作很好,因为1)皇宫是延迟执行和2)一个皇宫的查询返回的另一个可查询的对象。这里的含义是,你可以把你的皇宫询问在一起,你建造他们自己的输入,而不必做一个大规模的条款翻译SQL或任何backstore您使用的是(我的一个尝试,是建设SQL条款与串,但是仍然通过输入数据通过SQLParameters SQL注射防护-它是混乱和复杂的手工制作的皇宫几个数量级更容易理解和实施).

例如:

List<string> data; // or perhaps your a DB Context for LINQtoSQL?

var query = data.Where(item => item.contains("foo"));

if( {user supplies length search option} )
    query = query.Where(item => item.Length < 5);

// etc, etc.

// LINQ doesn't do anything until the query is iterated, at which point
// it will construct the SQL statement without you worrying about details or parameter binding
foreach(string value in query)
    ; // do something with the results

因为延迟执行以及返回的可查询类型,可以连接皇宫的查询,以此表达的所有一天长和让它担心,关于执行的细节(例如转换成SQL query)在执行时间。

我不能为你提供确切的步骤,你会需要做的,但我强烈建议寻找到asp.net 网页的生命周期。我创建了一个用户控制作为一个DLL一个时间。我捕捉回发数据在具体步骤在生命周期,重建和重新绑定的数据在其他步骤。此外thinkgs喜欢视图状态只适用于某些要点。我知道,我不得不复盖On_init,On_prerender和一些其他的方法。

对不起,我不可能是更多的帮助,但是我没有代码和我(其与老的雇主).我希望这有所帮助。

如果你是增加控制的控制树动态,需要增加它们在postpack。只是呼吁的方法,建立控制在Page_Load或Page_Init和控制应该留在该网页上回发。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top