我想就这个问题提出一些建议。基本上,我有2页(为简单起见),第二页完全依赖于第一页。
因此,假设主页面是搜索页面,第二页面是查看页面。
该站点处理XML请求,最终目标是将XML请求保持在最低限度,因为每个请求都有点慢。我考虑过使用Sessions,但过去我遇到了一些问题,用户之间随机混合会话,我只能通过将IIS中的回收过程更改为非常小的时间框架来控制,所以我想知道是否有任何其他方式。我已经尝试过TempData,但是在一个请求之后会过期,因此在视图页面上进行页面刷新似乎不可能。 (或者是吗?)
无论如何,我们有一个Search页面,其中包含View页面所需的5个属性,但只需要2个就可以在视图页面上发出XML请求。
e.g。
搜索页面包含:
查看页面需要“搜索”页面中的以下内容才能完成xml请求:
查看页面显示搜索页面中的所有信息,以及XML响应中的所有信息。
我在搜索页面中的链接只在网址中包含ID,因此第二页上的XML请求需要名称和电子邮件。不确定是否可以没有会话?
我尝试的是:
将搜索结果存储在TempData中。这样,当有人点击“查看”链接(<a href="/view/123456">View</a>
)时,“查看”页面会加载搜索结果,如下所示:
var viewPage = SearchResults.Where(w => w.ID == id).FirstOrDefault();
ViewModel然后通过从Name
抓取Email
和viewPage
,发出XML请求,并显示响应以及{{1}中的其他所需详细信息来呈现页面}。
它与tempdata一样正常工作。数据仅在第一个请求中持续存在,在页面刷新时死亡。会话是替代方案,但还有其他吗?
(抱歉文字墙:)
答案 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方法,允许用户将结果页面加入书签并稍后再返回。