使用MVC控制器取消/结束部分视图的渲染

时间:2013-05-01 12:03:04

标签: c# asp.net-mvc asp.net-mvc-4 razor

我试图在我的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>
}

1 个答案:

答案 0 :(得分:2)

为什么不将搜索框呈现为不可见,然后在documentReady()中包含一些jQuery代码以显示文本框?如果没有结果,那么它将立即生效,但如果有很多结果,则返回页面时无法使用。

理论上,用户可以使用另一个屏幕进行另一个查询,但我认为这可能超出了问题的范围。

编辑下面给出的评论

如果您正在使用MVC 4,则可以使搜索方法异步,请参阅this有关如何执行此操作的文章。然后可以使用类似ManualResetEvent之类的东西取消它,前提是正在搜索的代码可以看到它是否已设置并自行停止。