我已经构建了一个搜索页面,其中包含5个要过滤的属性。 当用户单击其中一个结果时,将加载详细信息页面。 现在我想提供一个“后退”按钮,以便用户可以使用原始过滤器返回搜索页面。
我在考虑使用TempData来存储过滤器模型。 Tempdata只存储在会话中,只有一次调用,因此一段时间后会话不会膨胀。
有更好的解决方案还是你们有一些建议? 让我知道!
修改 搜索页面将使用ajax调用来对页面进行分页,排序或过滤。 因此,如果我想从详细信息页面导航回来,则需要存储所有这些数据。 TempData是最好的方式吗?
答案 0 :(得分:2)
为什么不使用查询字符串呢?例如。搜索请求使用<form />
元素提交,method
属性设置为“get”。在这种情况下,您只需从查询字符串中读取即可轻松恢复表单状态,代码将更加简单。访问者还可以轻松地为页面添加书签并稍后返回搜索结果。
查看:
@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>
}
模特&amp;控制器:
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
}
}
希望这有帮助。
答案 1 :(得分:2)
好吧,TempData会保留一次调用的值,但您可以使用TempData.Keep()
保留TempData值,直到会话过期。
TempData["YourKey"] = "SomeValue";
TempData.Keep("YourKey");
希望它有所帮助。