MVC вернуться к странице с той же моделью

Я построил страницу поиска с 5 свойствами для фильтрации. Когда пользователь нажимает на один из результатов, загружается страница сведений. Теперь я хочу предоставить кнопку "Назад", чтобы пользователь мог вернуться на страницу поиска с оригинальным фильтром.

Я думал об использовании TempData для хранения модели фильтра. Tempdata хранится в сеансе только для одного вызова, поэтому через некоторое время сеанс не будет раздутым.

Есть ли лучшее решение или у вас есть предложения? Дай мне знать!

Редактировать: страница поиска будет использовать вызовы ajax для страницы, сортировки или фильтрации данных. Таким образом, все эти данные должны быть сохранены, если я хочу вернуться назад со страницы сведений. Является ли TempData лучшим способом?

2 ответа

Хорошо, TempData сохраняет значение для одного вызова, но вы можете сохранить значение TempData, используя TempData.Keep() пока ваша сессия не истекает.

TempData["YourKey"] = "SomeValue";
TempData.Keep("YourKey");

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

Почему бы не использовать строку запроса для этого? Например, поисковый запрос отправлен с использованием <form /> элемент с method атрибут установлен на "получить". В этом случае вы можете легко восстановить состояние формы, просто прочитав строку запроса, код будет намного проще. Посетители также могут легко добавить страницу в закладки и вернуться к результатам поиска позже.

Посмотреть:

@model SearchResultSet;

<form method="get" action="/search">
    <input type="text" name="q" value="@Request.QueryString["q"]" />
    <input type="submit" value="Search" />
</form>

@if (Model.Total > 0)
{
    <ul>
        @foreach (var result in Model.Results)
        {
            <li>...</li>
        }
    </ul>
}

Модель и контроллер:

public class SearchResultSet
{
    public IList<SearchResult> Results { get; set; }
    public long Total { get; set; }
} 

public class SearchController : Controller
{  
    public ActionResult Index(string q = "")
    {
        return View(GetModel(q));
    }

    private SearchResultSet GetModel(string searchQuery)
    {
        // Get search results
    }
}

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

Другие вопросы по тегам