Asp.net mvc 在页面之间传递和存储对象

Asp.net mvc 在页面之间传递和存储对象,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,我想在这个问题上得到一些建议。基本上,为了简单起见,我有两个页面,第二个页面完全依赖于第一个页面 假设主页是一个搜索页面,第二个页面是一个查看页面 该站点处理XML请求,最终目标是将XML请求保持在最低限度,因为每个请求都有点慢。我曾考虑过使用会话,但我在过去遇到过一些问题,会话是在用户之间随机混合的,我只是通过将IIS中的回收过程更改为一个非常小的时间范围来控制这些问题,所以我想知道是否还有其他方法。我尝试了TempData,但它在一个请求后过期,因此在视图页面上刷新页面似乎不可能。还是这样

我想在这个问题上得到一些建议。基本上,为了简单起见,我有两个页面,第二个页面完全依赖于第一个页面

假设主页是一个搜索页面,第二个页面是一个查看页面

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

无论如何,我们有一个搜索页面,它有,比如说,视图页面需要的5个属性,但是在视图页面上发出XML请求只需要2个属性

e、 g

搜索页面包含:

身份证件 名称 城市 电子邮件 身高 查看页面需要搜索页面中的以下内容才能完成xml请求:

身份证件 名称 电子邮件 查看页面显示搜索页面中的所有信息,以及XML响应中的所有内容

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

我试过的是:

将搜索结果存储在TempData中。这样,当有人单击“查看”链接时,查看页面将加载搜索结果,如下所示:

var viewPage = SearchResults.Where(w => w.ID == id).FirstOrDefault();
然后,ViewModel通过从viewPage获取名称和电子邮件、发出XML请求、显示响应以及viewPage中的其他所需详细信息来呈现页面

它与tempdata一样工作。数据只在第一次请求时存在,在页面刷新时消失。会话是另一种选择,但还有其他选择吗


很抱歉出现这样的文字墙:

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

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

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

刚刚快速查看了您的问题,我记得我曾经做过一个类似的项目。我通过使用非对称加密算法对值e-mail、name等进行加密并将其作为QueryString值来解决这个问题。另外,请记住TempData也在使用会话。
public ActionResult Search(SearchModel model)
{
    var results = ....
    return View(results);
}