Displaying search results
Here is another example with paging and a content extract in the search result:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox runat="server" ID="txtSearch"></asp:TextBox>
<asp:Button ID="btnSearch" OnClick="btnSearch_Click" runat="server" Text="Search" />
<asp:Literal runat="server" ID="litResult" EnableViewState="false"></asp:Literal>
</div>
</form>
</body>
</html>
The output of this example is:
In the code behind file:
using System;
using System.Web;
using WAF.Presentation.Web;
using WAF.Engine;
using System.Text;
using WAF.Engine.Content;
public partial class _Default : System.Web.UI.Page {
string _qSearch = "q";
string _qPage = "page";
int _pageSize = 10;
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) {
string search = Request[_qSearch];
if (search != null) {
litResult.Text = getSearchHtml(search);
txtSearch.Text = search;
}
}
}
protected void btnSearch_Click(object sender, EventArgs e) {
txtSearch.Text = txtSearch.Text.Trim();
if (txtSearch.Text.Length > 0) {
var qs = _qSearch + "=" + HttpUtility.UrlEncode(txtSearch.Text);
Response.Redirect(WAFContext.GetUrl(WAFContext.Request.NodeId, qs));
}
}
protected string getSearchHtml(string search) {
StringBuilder html = new StringBuilder();
if (search == null) return "";
int pageIndex = 0;
if (int.TryParse(Request["page"], out pageIndex)) pageIndex--;
int pageCount;
int totalCount;
try {
var query = new IndexQuery<ContentBase>();
query.BodySearch = search;
query.PageIndex = pageIndex;
query.PageSize = _pageSize;
var results = WAFContext.Session.Search(query, out pageCount, out totalCount);
html.Append("<div style=\"margin-top:10px;\">Your search gave <strong>");
html.Append(totalCount);
html.Append("</strong> hit" + (totalCount == 1 ? "" : "s"));
html.Append(": ");
html.Append("</div>");
if (pageIndex >= pageCount) pageIndex = pageCount - 1;
string pagingHtml = getPageHtml(_pageSize, pageCount, pageIndex, search);
if (pagingHtml != null) html.Append(pagingHtml);
foreach (var result in results) {
html.Append("<div style=\"margin-top:10px;\"><a href=\"");
html.Append(HttpUtility.HtmlAttributeEncode(WAFContext.GetUrl(result.Content)));
html.Append("\">");
html.Append(result.FormatSample(HttpUtility.HtmlEncode(result.Name), 160,
"<span style=\"font-weight:bold; font-style:italic; font-size:16px;\">", "</span>"));
html.Append("</a></div>");
html.Append("<div style=\"font-size:12px;\">");
html.Append(result.FormatSample(HttpUtility.HtmlEncode(result.Body), 160,
"<span style=\"font-weight:bold; font-style:italic; font-size:14px;\">", "</span>"));
html.Append("</div>");
}
if (pagingHtml != null) html.Append(pagingHtml);
} catch (Exception error) {
html.Append("<div style=\"color:gray; margin-top:10px;\">INVALID SEARCH: " + error.Message + "</div>");
}
return html.ToString();
}
string getPageHtml(int pageSize, int pageCount, int pageIndex, string search) {
if (pageCount < 2) return null;
StringBuilder html = new StringBuilder();
html.Append("<div style=\"margin-top:10px;\">");
html.Append("PAGES: ");
for (int i = 1; i <= pageCount; i++) {
html.Append("<a style=\"padding: 3px;");
if (i - 1 == pageIndex) html.Append("font-weight:bold;");
html.Append("\" href=\"");
var qs = _qSearch + "=" + HttpUtility.UrlEncode(search) + "&" + _qPage + "=" + i;
html.Append(WAFContext.GetUrl(WAFContext.Request.NodeId, qs));
html.Append("\">");
html.Append("[");
html.Append(i);
html.Append("]");
html.Append("</a>");
}
html.Append("</div>");
return html.ToString();
}
}