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
}
}
Надеюсь это поможет.