MVC导航回具有相同模型的页面

时间:2013-09-19 06:30:48

标签: c# asp.net-mvc session tempdata

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

我在考虑使用TempData来存储过滤器模型。 Tempdata只存储在会话中,只有一次调用,因此一段时间后会话不会膨胀。

有更好的解决方案还是你们有一些建议? 让我知道!

修改 搜索页面将使用ajax调用来对页面进行分页,排序或过滤。 因此,如果我想从详细信息页面导航回来,则需要存储所有这些数据。 TempData是最好的方式吗?

2 个答案:

答案 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");

希望它有所帮助。