ASP.NET MVC: сохранение состояния последней страницы

Вот ситуация: у меня есть SearchPage, где пользователь может сделать сложный поиск. Ничего особенного. После того, как результаты отображаются, пользователь может выбрать один из них и перейти на другую страницу (например, мастер /деталь).

У меня есть нарушение, в котором содержатся места, где находился пользователь, и оно может иметь более 4 уровней (например, Main -> 2Page -> 3Page -> 4Page -> NPage). Я хочу сохранить состояние каждого элемента управления на моей сложной странице поиска, если пользователь использует точку перехода для перехода назад, поскольку я не хочу, чтобы они снова вручную устанавливали все эти поисковые фильтры.

До сих пор я использовал javascript:history.back(), но так как у меня может быть несколько уровней на моей крошке, это не было очень полезно. Я думал об использовании OutputCache, но я не знаю, как поступить.

UPDATE

Я только что поговорил с коллегой, и он сказал мне, что некоторые наши списки (выпадающий список) генерируются динамически. Поэтому, если пользователь выберет один элемент в первом комбинированном списке, второй будет заполнен данными, относящимися к первому выбору.

4 голоса | спросил AdrianoRR 18 52011vEurope/Moscow11bEurope/MoscowFri, 18 Nov 2011 18:12:59 +0400 2011, 18:12:59

1 ответ


0

OutputCache будет кэшировать результаты для каждого пользователя. Почему бы вам не попытаться сохранить информацию в куки с URL страницы и фильтровать информацию. Каждый раз, когда выполняется действие, читайте cookie и заполняйте модель (пользовательскую модель для поиска) найденными значениями (если они соответствуют URL страницы, действие в этой ситуации). Передайте модель в представление и дайте ей снова заполнить текстовые поля критериев поиска и флажки.

UPDATE: Когда пользователь заполняет текстовые поля фильтра поиска, вы как-то передаете эту информацию контроллеру. Вероятно, как некий строго типизированный объект.

Допустим, ваши пользователи вводят следующую информацию: - Критерии - Дата начала - EndDate

Существует модель с именем SearchCriteria, определенная как:

public class SearchCriteria
{
    public string Criteria { get; set; }
    public DateTime? StartDate { get; set; }
    public DateTime? EndDate { get; set; }
}

Ваше действие может выглядеть примерно так:

[HttpGet]    
public ViewResult Search()
{
    SearchCriteria criteria = new SearchCriteria();

    if (Request.Cookies["SearchCriteria"] != null)
    {
        HttpCookie cookie = Request.Cookies["SearchCriteria"];
        criteria.Criteria = cookie.Values["Criteria"];
        criteria.StartDate = cookie.Values["StartDate"] ?? null;
        criteria.EndDate = cookie.Values["EndDate"] ?? null;
    }

    return View(criteria);
}

[HttpPost]
public ActionResult Search(SearchCriteria criteria)
{
    // At this point save the data into cookie
    HttpCookie cookie;

    if (Request.Cookies["SearchCriteria"] != null)
    {
        cookie = Request.Cookies["SearchCriteria"];
        cookie.Values.Clear();
    }
    else
    {
        cookie = new HttpCookie("SearchCriteria");
    }

    cookie.Values.Add("Criteria", criteria.Criteria);

    if (criteria.StartDate.HasValue)
    {
        cookie.Values.Add("StartDate", criteria.StartDate.Value.ToString("yyyy-mm-dd"));
    }

    if (criteria.EndDate.HasValue)
    {
        cookie.Values.Add("EndDate", criteria.EndDate.Value.ToString("yyyy-mm-dd"));
    }

    // Do something with the criteria that user posted

    return View();
}

Это какое-то решение. Пожалуйста, поймите, что я не проверял это, и я написал это из головы. Он призван дать вам представление о том, как вы можете решить эту проблему. Возможно, вам также следует добавить Action в SearchCriteria, чтобы вы могли проверить, является ли это подходящим действием, в котором вы читали бы cookie. Кроме того, чтение и запись файла cookie следует перенести в отдельный метод, чтобы вы могли читать его из других действий.

Надеюсь, это поможет,

Huske

ответил Husein Roncevic 18 52011vEurope/Moscow11bEurope/MoscowFri, 18 Nov 2011 18:17:05 +0400 2011, 18:17:05

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132