繁体   English   中英

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

[英]Cancel / end the rendering of a partial view using MVC controller

我正在尝试加快在MVC网络应用中返回搜索结果的速度。 如果用户先搜索一个词组,然后再搜索另一个词组,我想取消原始搜索, 或者实际上是取消结果的呈现,因为这需要花费时间。

编辑:搜索框是实时搜索的,因此,如果您输入具有很多结果的内容(例如“ the”),然后快速将其更改为更具体的内容,则原始搜索将保留最新的内容。

我最初以为是数据库交互是瓶颈(因此,我在此处取消数据库搜索请求的问题 ),但是在部分视图中呈现所有结果是开销:

我的SearchContoller具有以下形式:

public ActionResult Search(string query, string time) {

    // Go off and do search, returning results

    return PartialView("SearchResults", results);
}

如果在渲染第一个PartialView再次使用Search控制器方法,我可以以某种方式取消原始方法吗? 例如,在视图中我可以检查一个标志并取消该标志是否设置在其他地方吗?

视图:

@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>
}

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

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

在下面编辑给定的评论

如果你使用MVC 4,可以使搜索方法是异步的 ,看到这个文章对如何做到这一点。 然后,可以使用ManualResetEvent类的方法来取消该操作,前提是正在搜索的代码可以查看它是否已设置并自行停止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM