我试图在我的MVC网络应用中加快搜索结果的返回速度。如果用户搜索了一个短语,然后又搜索了另一个短片,我想取消原始搜索,或现实地取消结果的渲染,因为这需要时间。 < / p>
编辑:搜索框会实时搜索,因此如果您输入了大量结果的内容,例如&#34;&#34;,然后快速将其更改为更多内容具体,然后原始搜索保持最新的。
我原本以为是数据库交互是瓶颈(因此我关于取消数据库搜索请求的问题here),但它是在部分视图中呈现所有结果&# 39;开销:
我的SearchContoller
有以下形式:
public ActionResult Search(string query, string time) {
// Go off and do search, returning results
return PartialView("SearchResults", results);
}
如果在第一个Search
渲染时再次使用PartialView
控制器方法,我可以以某种方式取消原始的吗?例如,在视图中,我可以检查一个标志,如果在其他地方设置了该标志,则取消吗?
查看:
@model SearchResultModel
@if (Model.ResultType1.Count > 0) {
<h2>Results 1</h2>
<dl>
<dt>Results:</dt>
@foreach (var result in Model.Results1) {
if (FlagInControllerToStopThis) break; // OR SOMETHING SIMILAR??
<dd> <!--Each result is returned here--></dd>
}
</dl>
}
答案 0 :(得分:2)
为什么不将搜索框呈现为不可见,然后在documentReady()
中包含一些jQuery代码以显示文本框?如果没有结果,那么它将立即生效,但如果有很多结果,则返回页面时无法使用。
理论上,用户可以使用另一个屏幕进行另一个查询,但我认为这可能超出了问题的范围。
编辑下面给出的评论
如果您正在使用MVC 4,则可以使搜索方法异步,请参阅this有关如何执行此操作的文章。然后可以使用类似ManualResetEvent
之类的东西取消它,前提是正在搜索的代码可以看到它是否已设置并自行停止。