I suppose there are a few ways to try and accomplish this.
- Pass the search parameters via query string instead of post. Understandably, this could be complicated and messy for advanced search parameters
- Store the results of the POST to hidden elements. Have your paging control POST to the same action each time, instead of the separate Resultsaction.
- Store the query parameters in an object that is persisted in your session.
I'm sure we could get more creative from there, but that should give you a start. It seems like you only care about one field from the search form, TypeOfListing. You should be able to persist that via query string pretty easily, so that'd be method #1 above.
Update
Here's something simple I put together to maintain your search at the client. The technique involves three parts:
- Maintain the form between page requests.
- Manage the page state with a hidden element in the form.
- Have JavaScript intercept your Paging links, update the page number hidden element, and resubmit the form.
Here's the code for all the various pieces. Note that I use jQuery, in case you prefer something else. I fudged the data source, just sub in real data. Also, I included PagedList and PaginationHelper. Substitute with your own if you wish.
\Controllers\HomeController.cs (Search is the relevant part):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcApplication2.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        List<String> _data;
        public HomeController()
        {
            _data = new List<String>();
            _data.Add("Merry");
            _data.Add("Metal");
            _data.Add("Median");
            _data.Add("Medium");
            _data.Add("Malfunction");
            _data.Add("Mean");
            _data.Add("Measure");
            _data.Add("Melt");
            _data.Add("Merit");
            _data.Add("Metaphysical");
            _data.Add("Mental");
            _data.Add("Menial");
            _data.Add("Mend");
            _data.Add("Find");
        }
        public ActionResult Search()
        {
            Int32 pageNumber, pageSize = 5, total, first;
            String typeOfListing;
            PagedList<String> results;
            if (Request.HttpMethod == "GET")
            {
                return View();
            }
            if (!Int32.TryParse(Request.Form["PageNumber"], out pageNumber)) pageNumber = 1;
            typeOfListing = Request.Form["TypeOfListing"];
            first = (pageNumber - 1) * pageSize;
            total = (from s in _data
                     where s.Contains(typeOfListing)
                     select s).Count();
            results = new PagedList<String>(
                            (from s in _data
                             where s.Contains(typeOfListing)
                             select s)
                             .Skip(first)
                             .Take(pageSize), 
                            total, pageNumber, pageSize);
                return View(results);
        }
    }
}
\Helpers\PaginationHelper.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.Web.Routing;
using System.Web.Mvc;
using System.Web.Mvc.Html;
namespace MvcApplication2.Helpers
{
    public static class PaginationHelper
    {
        public static String Pager(this HtmlHelper helper, Int32 pageSize, Int32 pageNumber, Int32 total, String actionName, RouteValueDictionary values)
        {
            StringBuilder output = new StringBuilder();
            Int32 totalPages = (Int32)Math.Ceiling((Double)total / pageSize);
            if (values == null)
                values = helper.ViewContext.RouteData.Values;
            if (pageNumber > 1)
                output.Append(CreatePageLink(helper, values, "< Previous ", pageNumber - 1, pageSize));
            for (Int32 i = 1; i <= totalPages; i++)
            {
                if (i == pageNumber)
                    output.Append(i);
                else
                    output.AppendFormat(CreatePageLink(helper, values, i.ToString(), i, pageSize));
                if (i < totalPages)
                    output.Append(" | ");
            }
            if (pageNumber < totalPages)
                output.Append(CreatePageLink(helper, values, " Next >", pageNumber + 1, pageSize));
            return output.ToString();
        }
        private static String CreatePageLink(HtmlHelper helper, RouteValueDictionary values, String text, Int32 pageNumber, Int32 pageSize)
        {
            RouteValueDictionary routeDictionary = new RouteValueDictionary(values);
            routeDictionary.Add("page", pageNumber);
            routeDictionary.Add("pageSize", pageSize);
            return helper.ActionLink(text, null, routeDictionary);
        }
    }
}
\PagedList.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MvcApplication2
{
    public class PagedList<T> : List<T>
    {
        public Int32 TotalCount { get; protected set; }
        public Int32 PageNumber { get; protected set; }
        public Int32 PageSize { get; protected set; }
        public PagedList(IEnumerable<T> items, Int32 total, Int32 pageNumber, Int32 pageSize)
            : base(items)
        {
            TotalCount = total;
            PageNumber = pageNumber;
            PageSize = pageSize;
        }
    }
}
\Views\Home\Search.aspx:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<PagedList<String>>" %>
<%@ Import Namespace="MvcApplication2" %>
<%@ Import Namespace="MvcApplication2.Helpers" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Search
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <script type="text/javascript">
        $(function() {
            var results = $("#searchResults");
            if (results && results.children().length > 2) {
                $("#searchForm").hide();
                $("#searchResults .pager>a").click(submitForm);
            }
        });
        function submitForm() {
            var m = this.href.match(/page=(\d+)/i);
            if (m) {
                $("#PageNumber").attr("value", m[1]);
                $("#searchForm").submit();
            }
            return false;
        }
    </script>
    <form id="searchForm" action="<%= Url.Action("Search") %>" method="post">
        <input type="hidden" value="1" id="PageNumber" name="PageNumber" />
        <fieldset>
            <legend>Search</legend>
            <label for="TypeOfListing">Type of Listing</label>
            <%= Html.TextBox("TypeOfListing", Request.Form["TypeOfListing"]) %>
            <input type="submit" id="btnSubmit" name="btnSubmit" value="Search" />
        </fieldset>
    </form>
   <% if (Model != null)
   {
   %>
    <div id="searchResults">
        <div class="results-count">Displaying <%=this.Model.Count %> of <%=this.Model.TotalCount %> results. <%=Html.ActionLink("Start a new search", "Search") %>.</div>
        <%
               foreach (String result in Model)
               { 
        %>
        <div class="result"><%=result %></div>
        <%     }
        %>
        <div class="pager"><%= Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalCount, null, null) %></div>
    </div>
    <%
     } 
    %>
</asp:Content>