Хорошо, я все еще немного смутен в том, что вам действительно нужно, но я попробую (хотя, боюсь, это вызовет больше вопросов, чем ответов; -).
В вашем global.asax.cs добавьте маршрут, подобный следующему:
routes.MapRoute(
"MachineList",
"Machines/AddLocationFilter/{filterValue}",
new { controller = "Machines", action = "AddLocationFilter", filterValue = "" }
);
Тогда все ваши ссылки в вашем представлении будут выглядеть так (где 'value' - это значение вашего фильтра):
<%= Html.ActionLink("link text",
"AddLocationFilter",
new { filterValue = value })%>
Теперь в вашем контроллере Machines:
public ActionResult Index()
{
//Get your machines here
//NOTE: I have no idea how you want this to work and this is just an example of how it could work
IQueryable<Machine> machines = myMachineRepository.GetAllMachines();
//Use the "FilterLocations" session value if it exists
if (Session["FilterLocations"] != null)
{
IList<string> filterLocations = Session["FilterLocations"] as List<string>
machines.Where(m => Locations.Contains(m.Location))
}
//Now send the filtered list of machines to your view
return View(machines.ToList());
}
public ActionResult AddLocationFilter(string filterValue)
{
//If there isn't a filterValue don't do anything
if (string.IsNullOrEmpty(filterValue))
return RedirectToAction("index");
IList<string> filterLocations;
//Get it from session
if (Session["FilterLocations"] != null)
filterLocations = Session["FilterLocations"] as List<string>
//If it's still null create a new one
if (filterLocations == null)
filterLocations = new List<string>();
//If it doesn't already contain the value then add it
if (!filterLocations.Contains(filterValue))
filterLocations.Add(filterValue);
//Finally save it to the session
Session["FilterLocations"] = filterLocations;
//Now redirect
return RedirectToAction("index");
}
Savvy?
Я не совсем доволен перенаправлением в конце, но я сделал это для простоты, чтобы попытаться помочь вам понять вещи проще. С jQuery вы можете сделать несколько обтекаемых и сексуальных вещей и вернуть результат в формате JSON ... но это уже другой уровень.
HTHS
Charles