Skip to content

Instantly share code, notes, and snippets.

@adam-davis
Created November 12, 2012 07:00
Show Gist options
  • Save adam-davis/4057894 to your computer and use it in GitHub Desktop.
Save adam-davis/4057894 to your computer and use it in GitHub Desktop.
Basic Dynamic Filter
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/ForumMain.master"
Inherits="System.Web.Mvc.ViewPage<List<MvcForums.Models.Forum>>" %>
<asp:Content ID="Content2" ContentPlaceHolderID="head" runat="server">
<style type="text/css">
#filterHeader
{
margin-bottom: 10px;
font-size: 16px;
display:block;
}
</style>
<script type="text/javascript">
var approvalFilterState = {};
$(document).ready(function () {
var approvalFilterCheckboxes = $(".approvalFilterChkbox");
for (var i = 0; i < approvalFilterCheckboxes.length; ++i) {
approvalFilterState[approvalFilterCheckboxes[i].value] = approvalFilterCheckboxes[i].checked;
}
});
function filterResults(filterOption) {
approvalFilterState[filterOption.value] = !approvalFilterState[filterOption.value];
var filterOption = determineApprovalFilterOption();
updateAdminPanel(filterOption);
}
function updateAdminPanel(filterOption) {
$.ajax(
{
type: 'POST',
url: '<%=Url.Action("Filter","Forum")%>/' + filterOption,
success: function (response) {
$('#mainDisplayArea').html(response);
},
error: function (response) {
alert(response);
}
});
}
function determineApprovalFilterOption() {
if (approvalFilterState["all"] || (approvalFilterState["approved"] && approvalFilterState["unapproved"]))
return "all";
if (approvalFilterState["approved"])
return "approved";
if (approvalFilterState["unapproved"])
return "unapproved";
return "none";
}
</script>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="header" runat="server">
</asp:Content>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<div style="float:left;" id="filterArea">
<span id="filterHeader">Filters....</span>
<br />
<input class="approvalFilterChkbox" type="checkbox" onclick="javascript: filterResults(this)" id="filterAll" value="all" /> All Reviews
<br />
<input class="approvalFilterChkbox" type="checkbox" onclick="javascript: filterResults(this)" id="filterApproved" value="approved" /> Approved Reviews
<br />
<input class="approvalFilterChkbox" type="checkbox" onclick="javascript: filterResults(this)" id="filterUnapproved" value="unapproved" /> Unapproved Reviews
<br />
</div>
<div id="mainDisplayArea">
<% @Html.Partial("FilterArea",Model); %>
</div>
</asp:Content>
public class ForumController : Controller
{
//
// GET: /Forum/
MvcForumsEntities _entities;
public List<Forum> _currentForums;
public ForumController()
{
_entities = new MvcForumsEntities();
_currentForums = new List<Forum>();
}
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Filter()
{
_entities = new MvcForumsEntities();
var tempForums = (from forum in _entities.Forum select forum).ToList();
return View(tempForums);
}
[AcceptVerbs(HttpVerbs.Post)]
public PartialViewResult Filter(string approvalFilter)
{
switch(approvalFilter)
{
case("approved"):
_currentForums = (from forum in _entities.Forum where forum.id != 1 select forum).ToList();
break;
case("unapproved"):
_currentForums = (from forum in _entities.Forum where forum.id % 2 != 1 select forum).ToList();
break;
case("none"):
_currentForums = new List<Forum>();
break;
case("all"):
_currentForums = (from forum in _entities.Forum select forum).ToList();
break;
}
return PartialView("FilterArea", _currentForums);
}
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<MvcForums.Models.Forum>>" %>
<div class="phoneReviewArea">
<% foreach (MvcForums.Models.Forum forum in Model)
{%>
holler
<%=forum.description %>
<%} %>
</div>
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("ForumFilter",
"Forum/Filter/{approvalFilter}",
new { controller = "Forum", action = "Filter", approvalFilter = "all" });
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment