public ActionResult SearchPage(ProductsListViewModel model)
        {
            var searchResults = productSearchManager.Search(new SearchOptions
            {
                Query        = model.Query,
                PageNumber   = model.PageNumber,
                ResultFields = ProductFields.AllExcept(ProductFields.Description),
                PageSize     = model.PageSize,
                InverseSort  = model.InverseSort,
                SortField    = model.SortField
            });

            model.RelevantSortTypeAvailable = true;

            model.Items           = Mapper.Map <IList <ProductListItemViewModel> >(searchResults.Items);
            model.TotalItemsCount = searchResults.TotalCount;
            return(View("List", model));
        }
        public string RenderHTML()
        {
            if (_Cache.ContainsKey(_productID))
            {
                return(_Cache[_productID]);
            }
            ProductQuery query = new ProductQuery();
            Product      pT    = Products.GetProduct(_productID);

            query.ProductNameFilter = pT.ProductName;
            query.PageSize          = Int32.MaxValue;
            query.ProductOrderBy    = ProductOrderBy.DisplayOrder;
            query.SortOrder         = SortOrder.Descending;
            query.PageSize          = int.MaxValue;
            query.HasPublished      = true;
            SearchResultDataSet <Product> ps = ProductSearchManager.Search(query);

            if (ps == null || ps.Records == null || ps.Records.Count == 0 || (ps.Records.Count == 1 && ps.Records[0].ProductID == _productID))
            {
                return("<div class=\"nopiInfo\"><span>没有相关产品信息!</span></div>");
            }
            string         nav      = GlobalSettings.RelativeWebRoot + "pages/view.aspx?product-product";
            List <Product> psList   = null;
            Product        p        = null;
            StringBuilder  sb       = new StringBuilder();
            int            curCount = ps.Records.Count;

            psList = ps.Records.GetRange(0, Math.Min(curCount, _Max));
            sb.AppendLine("<table cellpadding=\"0\" cellspacing=\"0\" class=\"" + _CssClass + "\">");
            string pId    = string.Empty;
            int    length = psList.Count;
            string pn     = string.Empty;

            for (int i = 0; i < psList.Count; i++)
            {
                p = psList[i];
                if (p.ProductID == _productID)
                {
                    continue;
                }
                if (i % _Columns == 0)
                {
                    sb.AppendLine("<tr>");
                }
                pId = GlobalSettings.Encrypt(p.ProductID.ToString());
                sb.AppendLine("<td>");
                sb.AppendLine("<div class=\"piThumbnail\">" +
                              "<a href=\"" + nav + "&ID=" + pId + "\" target=\"_blank\">" +
                              "<div style=\"background-image:url(" + p.GetDefaultImageUrl(100, 100) + ")\" title=\"" + HtmlHelper.RemoveHtml(p.ProductName) + "\" >" +
                              "</div>" +
                              "</a>" +
                              "</div>");
                pn = HtmlHelper.RemoveHtml(p.ProductName);
                sb.AppendLine("<div class=\"piProductName\" title='" + pn + "'>" + GlobalSettings.SubString(pn, 15) + "</div>");
                sb.AppendLine("<div class=\"piPrice\">" + GetPrice(p.ProductID) + "</div>");
                sb.AppendLine("</td>");

                if (i % _Columns == _Columns - 1)
                {
                    sb.AppendLine("</tr>");
                }
            }

            sb.AppendLine("</table>");
            if (!_Cache.ContainsKey(_productID))
            {
                lock (_lock)
                    if (!_Cache.ContainsKey(_productID))
                    {
                        if (_Cache.Count > maxCached)
                        {
                            _Cache.Clear();
                        }
                        _Cache.Add(_productID, sb.ToString());
                    }
            }
            return(sb.ToString());
        }
    void BindData()
    {
        ProductQuery query = this.Query;

        lnkGrid.PostBackUrl = Request.RawUrl;
        lnkList.PostBackUrl = Request.RawUrl;
        lnkGrid.Attributes.Add("rel", "grid");
        lnkList.Attributes.Add("rel", "list");

        #region -Adapt Show-
        string s = Request.QueryString["s"];
        if (!string.IsNullOrEmpty(s))
        {
            switch (s)
            {
            case "grid":
                lnkGrid.CssClass   = "showByGrid showBy showByGridActive";
                lnkList.CssClass   = "showByList showBy";
                cpProduct.PageSize = 10;
                break;

            case "list":
                lnkList.CssClass   = "showByList showBy showByListActive";
                lnkGrid.CssClass   = "showByGrid showBy";
                cpProduct.PageSize = 50;
                break;
            }
        }
        else
        {
            cpProduct.PageSize = 10;
            s = "grid";
            lnkGrid.CssClass = "showByGrid showBy showByGridActive";
            lnkList.CssClass = "showByList showBy";
        }
        #endregion

        #region -BindData-
        string         sortBy    = Request.QueryString["sortby"];
        ProductOrderBy orderBy   = ProductOrderBy.DisplayOrder;
        SortOrder      sortOrder = SortOrder.Descending;
        if (!string.IsNullOrEmpty(sortBy))
        {
            try
            {
                ddlSortBy.Items.FindByValue(sortBy).Selected = true;
            }
            catch { ddlSortBy.SelectedIndex = 0; }
            GetData(out orderBy, out sortOrder, sortBy);
        }
        query.ProductOrderBy = orderBy;
        query.SortOrder      = sortOrder;
        query.PageSize       = int.MaxValue;
        query.HasPublished   = true;
        List <Product> prods = null;
        if (!IsSearch)
        {
            prods = Products.GetProducts(query).Records;
        }
        else
        {
            if (string.IsNullOrEmpty(query.ProductNameFilter))
            {
                prods = Products.GetProducts(query).Records;
            }
            else
            {
                SearchResultDataSet <Product> _pros = ProductSearchManager.Search(query);
                prods                 = _pros.Records;
                pnlSearch.Visible     = true;
                ltSearchDuration.Text = "搜索用时:" + _pros.SearchDuration.ToString() + "秒。";
            }
        }
        if (prods == null || prods.Count == 0)
        {
            msgBox.ShowMsg("没有符合条件的产品存在!", System.Drawing.Color.Gray);
            return;
        }
        msgBox.HideMsg();
        bool islogin = Context.User.Identity.IsAuthenticated;
        if (orderBy == ProductOrderBy.Price)
        {
            prods.Sort(new SortProductByPrice(sortOrder,
                                              (islogin ? Profile.AccountInfo.UserID : 0),
                                              islogin
                                              ));
        }

        if (s == "grid")
        {
            dlProduct2.Visible      = false;
            dlProduct.Visible       = true;
            cpProduct.DataSource    = prods;
            cpProduct.BindToControl = dlProduct;
            dlProduct.DataSource    = cpProduct.DataSourcePaged;
            dlProduct.DataBind();
        }
        else
        {
            dlProduct.Visible       = false;
            dlProduct2.Visible      = true;
            cpProduct.DataSource    = prods;
            cpProduct.BindToControl = dlProduct2;
            dlProduct2.DataSource   = cpProduct.DataSourcePaged;
            dlProduct2.DataBind();
        }
        #endregion
    }