0

我正在开发一个基于 ASP.NET 4.0、JQUERY、AJAX 和 Javascript 的 Web 应用程序。我有一个特定的搜索页面,用户可以在其中通过多个因素进行搜索,即按日期、名称、代码、类别等。

例如

A) 在 SearchProducts 表单中,用户可以通过其唯一的编号或名称或开始日期/结束日期或类别或等来搜索产品。

B) 用户可以通过标准搜索表单应该能够执行的一个或所有参数进行搜索。

C)如果用户通过开始日期和结束日期搜索说 2012 年 12 月 1 日至 2012 年 12 月 31 日,例如,我的搜索结果包含 4 个产品,即 4 个产品是从 12 月 1 日到 12 月 31 日购买的

D) 结果显示在网格中,通过单击产品编号,通过查询字符串使用 ProductID 重定向到其查看页面(选择的产品特定完整详细信息)。

E)我有一个要求,使用户能够保留他/她通过查看页面(选择的产品特定完整详细信息)页面中的返回搜索按钮搜索的搜索结果

现在,我的计划如下:

1)当用户提交搜索时,我想存储用户输入的搜索参数的引用,即日期、名称、类别等。

2)我将在查询字符串中设置一个值,以区分正常请求和通过返回搜索按钮请求。

3)搜索页面中的代码:

       if (!(IsPostBack))
       {
          string tempRequestMode = string.Empty;

          if (Request.QueryString["requestMode"] != null)
          {
              tempRequestMode = Request.QueryString["requestMode"].ToString();

              if (tempRequestMode == "searchResults")
              {
                 //RestoreValues();
                 //Fetch results from the database again based on above results
              }
          }
       }

现在,我的问题是:

我想为此目的使用ASP.NET 缓存:

优点:它的过期和依赖

缺点:它具有应用范围,即它不像 Session 那样对每个用户都是明智的。

第二个选项是会话

优点:对每个用户来说都是明智的。

缺点:会话更占用内存。

我很困惑我应该使用什么。是否有任何其他选项可以使用,因为不同用户的搜索条件不同,因此希望用户明智地维护数据

4

2 回答 2

0

您可以将所有搜索条件写入 QueryString。

当用户单击搜索按钮时,运行以下 Javascript:

客户端

<script type="text/javascript">
    var url = "Invoices.aspx?type=__type__&status=__status__&order=__order__";

    var type= $("#<%= drpType.ClientID%>").val(); // Type 
    var status = $("#<%= drpStatus.ClientID %>").val(); // Status Parameter
    var order = $("#<%= drpOrder.ClientID %>").val(); //  order Parameter

    window.location = url.replace("__type__",type).replace("__status__",status).replace("__order__",order).replace(");
</script>

服务器端

  protected void Page_Load(object cart, EventArgs curt)
            {

                _type = Request.QueryString["type"];
                if (string.IsNullOrEmpty(_type))
                    _type = Enums.InvoiceUserTypes.RS.ToString(); //Default

                _status = Request.QueryString["status"];
                if (string.IsNullOrEmpty(_status)) _status = "ALL"; //Default

                _order= Request.QueryString["order"];
                if (string.IsNullOrEmpty(_order)) _order = "date"; //Default



                drpStatus.Value = _status;
                drpType.Value = _type;
                drpOrder.Value = _order;

RunReport();
            }

当用户单击后退按钮时。搜索参数将在 URL 上

于 2012-12-18T11:55:47.627 回答
0

我认为这种情况的最佳方法是在用户返回搜索页面后使用存储的过滤器重做搜索。任何其他方法都会给您带来很大的缺点。

缓存过期,如果您使用默认实现,它们将不允许您的应用扩展到多台机器,因为它们是本地的。

使用会话也是一个坏主意,因为它们会吃掉你的资源并且也不允许你扩展。

如果必须存储结果,则应将它们序列化(LOB 模式)存储在数据库或其他网络可访问资源中,以便可以在任何应用程序服务器中检索它们。

于 2012-12-18T12:43:40.047 回答