0

我已经建立了一个搜索页面,其中包含 5 个要过滤的属性。当用户单击其中一个结果时,将加载详细信息页面。现在我想提供一个“返回”按钮,以便用户可以使用原始过滤器返回搜索页面。

我正在考虑使用 TempData 来存储过滤器模型。临时数据存储在会话中仅用于一次调用,因此会话在一段时间后不会膨胀。

有没有更好的解决方案或者你们有什么建议?让我知道!

编辑: 搜索页面将利用 ajax 调用来分页、排序或过滤数据。因此,如果我想从详细信息页面返回,则需要存储所有这些数据。TempData 是最好的方法吗?

4

2 回答 2

2

好吧,TempData 保留一次调用的值,但是您可以保留 TempData 值,TempData.Keep()直到您的 Session 过期。

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

希望能帮助到你。

于 2013-09-19T09:33:38.760 回答
2

为什么不为此使用查询字符串?例如,使用属性设置为“get”的<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
    }
}

希望这可以帮助。

于 2013-09-19T06:45:46.147 回答