在页面之间传递和存储对象

时间:2012-04-04 07:11:03

标签: asp.net-mvc asp.net-mvc-3

我想就这个问题提出一些建议。基本上,我有2页(为简单起见),第二页完全依赖于第一页。

因此,假设主页面是搜索页面,第二页面是查看页面。

该站点处理XML请求,最终目标是将XML请求保持在最低限度,因为每个请求都有点慢。我考虑过使用Sessions,但过去我遇到了一些问题,用户之间随机混合会话,我只能通过将IIS中的回收过程更改为非常小的时间框架来控制,所以我想知道是否有任何其他方式。我已经尝试过TempData,但是在一个请求之后会过期,因此在视图页面上进行页面刷新似乎不可能。 (或者是吗?)

无论如何,我们有一个Search页面,其中包含View页面所需的5个属性,但只需要2个就可以在视图页面上发出XML请求。

e.g。

搜索页面包含

  • ID
  • 名称,
  • 电子邮件,
  • 高度

查看页面需要“搜索”页面中的以下内容才能完成xml请求

  • ID
  • 名称,
  • 电子邮件

查看页面显示搜索页面中的所有信息,以及XML响应中的所有信息。

我在搜索页面中的链接只在网址中包含ID,因此第二页上的XML请求需要名称和电子邮件。不确定是否可以没有会话?

我尝试的是:

将搜索结果存储在TempData中。这样,当有人点击“查看”链接(<a href="/view/123456">View</a>)时,“查看”页面会加载搜索结果,如下所示:

var viewPage = SearchResults.Where(w => w.ID == id).FirstOrDefault();

ViewModel然后通过从Name抓取EmailviewPage,发出XML请求,并显示响应以及{{1}中的其他所需详细信息来呈现页面}。

它与tempdata一样正常工作。数据仅在第一个请求中持续存在,在页面刷新时死亡。会话是替代方案,但还有其他吗?

(抱歉文字墙:)

1 个答案:

答案 0 :(得分:0)

为什么不在搜索页面中使用更多标准技术(如<form>标记,指向将执行搜索的控制器操作:

@using (Html.BeginForm("search", "somecontroller", FormMethod.Get))
{
    ... some input fields for your search criteria
    <button type="submit">Search</button>
}

然后您将拥有搜索控制器操作:

public ActionResult Search(SearchModel model)
{
    var results = ....
    return View(results);
}

我在表单上使用了GET方法,允许用户将结果页面加入书签并稍后再返回。