【问题标题】:How to load data using thread in ASP.Net MVC?如何在 ASP.Net MVC 中使用线程加载数据?
【发布时间】:2014-03-20 03:59:23
【问题描述】:

首先,我使用的是 .Net framework 4,因此,我还不能使用 Async/Await(是的,我知道,我应该升级到 vs 2013)。

不管怎样,请看下面的简单代码:

    public ActionResult Index()
    {
        HomeViewModel model = new HomeViewModel();
        var worker = new BackgroundWorker();
        worker.DoWork += (s, e) =>
            {
                model.ItemsToDisplay = SlowProcessList();
            };

        return View(model);
    }

    public static List<string> SlowProcessList()
    {
        List<string> strList = new List<string>();

        strList.Add("First Item");
        Thread.Sleep(3000);

        strList.Add("Second Item");
        Thread.Sleep(3000);

        strList.Add("Third Item");
        Thread.Sleep(3000);

        return strList;
    }

查看:

@foreach (var item in Model.ItemsToDisplay)
{
    <p>@item</p>
}

如您所见,我想先返回视图,然后在后台加载数据并在可用时将其显示在表单上。任何人都可以指导我这样做的正确方向吗?

我认为解决此问题的正确方法是:在 PageLoad 上进行 Ajax 调用并等待该响应。

【问题讨论】:

  • 为此你为什么不使用 Jquery ajax 调用?

标签: c# asp.net-mvc multithreading .net-4.0


【解决方案1】:

在 HTTP 中,您只能发送一次响应。

您不能发送大部分响应,然后让服务器继续在后台工作以稍后发送更多数据。

不过没关系,因为你的下一个想法是正确的。解决这个问题的方法是使用 javascript 让客户端发送更多请求,从而获得更多数据。

就个人而言,我使用AngularJS。让我们看看它是如何工作的。

  1. 用户请求页面(操作)。
  2. 网络服务器将响应作为单个 HTML 页面提供。
  3. Angular controller 在页面加载后加载额外数据。
  4. Angular 将数据呈现到页面。

您需要了解 AJAX 的工作原理以及解决此问题的最佳方式。我的方法比 jQuery hack 更复杂一些,但它更易于维护和组织(不是 jQuery 的忠实粉丝)。

【讨论】:

  • 是的,我明白你在说什么。假设我想返回 List。我将在 MVC 中进行另一个 AJAX 调用和 JSON 响应。那些将如何序列化?或者我想问的是,我将如何在网页上显示 List
  • 这取决于你是否使用WebApi。 WebApi 会自动将您返回的任何响应转换为 Json(或 XML)。否则Json.NET 可以将 .NET 类型序列化为 Json 字符串。然后你可以使用JSON.parse
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 2013-12-26
  • 1970-01-01
  • 2022-01-17
  • 2019-08-21
相关资源
最近更新 更多