¿Cómo aplico el filtro al paginar en Asp.net MVC y entidad Framework?

Tengo una aplicación web que está escrita usando el framework ASP.NET MVC. En miHomecontroller Tengo una acción llamadaIndex que responde a unGet solicitud. En esta acción, creo páginas usandoIPagedList biblioteca para romper los registros en varias páginas. MiIndex@HttpGet se parece a esto

public ActionResult Index(int? id)
{
    using(var connection = new Context())
    {
        int pageNumber = (id ?? 1);
        var presenter = new Presenter
        {
            Presenter = pageNumber,
            Tasks = connection.Tasks.ToPagedList(pageNumber, 30),
            Form = new TasksFiltersViewModel()
        }

        return View(presenter);
    }
}

También tengo una acción llamadaIndex que responden a laPost solicitud que aplica algunos filtros. Entonces en elPost solicito que haga algo como esto

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index(Presenter model)
{
    int pageNumber = (id ?? 1);
    if (ModelState.IsValid)
    {
        using(var connection = new Context())
        {
            model.Tasks = connection.Tasks
                                    .Where(task => task.Status == 5)
                                    .ToPagedList(pageNumber, 30);
        }
    }

    return View(model);
}

Esto también funciona bien a menos que el usuario haya cambiado la página, entonces los filtros están en reposo.

Así es como se ve mi clase de presentación

public class Presenter
{
    public IPagedList<Task> Tasks { get; set; }
    public TasksFiltersViewModel Form { get; set; }
    public int PageNumber { get; set; }
    public IEnumerable<SelectListItem> Statuses { get; set; }
}

¿Cómo puedo permitir que los usuarios usen las páginas mientras mantienen los filtros?

Aquí está mi VM de filtros

public class TasksFiltersViewModel
{
    public int Status { get; set; }
}

La vista se ve así

@using (Html.BeginForm("Index", "Tasks", FormMethod.Post, new { @class = "form-horizontal" }))
{
    @Html.AntiForgeryToken()

    <div class="form-group">
        @Html.LabelFor(m => m.Form.Status, new { @class = "control-label col-sm-3" })
        <div class="col-sm-9">
            @Html.DropDownListFor(m => m.Form.Status, Model.Statuses, new { @class = "form-control" })
            @Html.ValidationMessageFor(m => m.Form.Status, "", new { @class = "text-danger" })
        </div>

    </div>

    <div class="row">
        <div class="col-sm-9 col-md-push-3">
            <div>
                <button type="submit" class="btn btn-default">Filter</button>
            </div>
        </div>
    </div>

}

foreach (var task in Model.Tasks)
{
    <tr>
        <td>@task.Name</td>
        <td>@task.Type</td>
        <td>@Html.ActionLink("Edit", "Details", "Task", new { @id = task.Id }, new { @class = "btn btn-primary btn-sm" })</td>
    </tr>
}


@Html.PagedListPager(Model.Tasks, id => Url.Action("Index", new { id }))

Respuestas a la pregunta(3)

Su respuesta a la pregunta