显示" loading"从Controller加载数据时

时间:2014-12-05 13:17:11

标签: c# asp.net-mvc asp.net-ajax

我有一个从互联网上获取大量数据的功能。获取所有数据大约需要15秒。 如何在仍在加载时显示文本(如“加载数据”)。 现在,它看起来像这样:

  1. 我进入页面

  2. 我的“索引”加载了我的“LoadData”功能。

  3. 该函数将数据存储到ViewBags

  4. 该函数返回View

  5. 在视图中:

    <table class='table' id='vmTable' border='1'>
        <tr>
            <th>VM Name</th>
            <th>Status</th>
            <th>Shutdown Time</th> 
            <th>Service Name</th> 
            <th>Created Date</th> 
            <th>Last Modified</th>
            <th>Port</th>
        </tr>
    
        @for (int i = 0; i < ViewBag.AmountOfVms; i++)
        {
            <tr class="tableColumn vmColumn">
                <td class="vmName">@ViewBag.VMs[i, 0]</td>
                <td class="vmStatus">@ViewBag.VMs[i, 1]</td>
                <td class="vmShutDown">@ViewBag.VMs[i, 6]</td>
                <td class="vmServiceName">@ViewBag.VMs[i, 2]</td>
                <td class="vmCreatedDate">@ViewBag.VMs[i, 3]</td>
                <td class="vmLastModified">@ViewBag.VMs[i, 4]</td>
                <td class="vmPort">@ViewBag.VMs[i, 7]</td>
            </tr>
        }
    
    </table>
    

    我听说过Ajax并使用了部分视图。 那么,我可以将我的表显示为部分视图,然后说出

    @if (ViewBag.VMs[i, 0] == null)
    {
        <td>Loading...</td>
    }
    

    然后每秒刷新部分视图?如何在页面上运行我的“LoadData”功能。 或者换句话说:当ViewBag为空时,我如何只显示“加载”。

    你有什么好的例子吗?¨

2 个答案:

答案 0 :(得分:1)

首先,我建议你开始使用Model而不是ViewBag。

ViewBag vs Model, in MVC.NET

其次,您只使用一种名为Ajax的技术:)

Render Partial View Using jQuery in ASP.NET MVC

你可以在这里看到一个例子:)

答案 1 :(得分:1)

Razor代码在服务器端进行评估。这意味着一旦客户端加载了视图,就不再有代码可以运行了。该页面就在那里。如果viewbag为空,则无法编写加载局部视图的while循环(在Razor中)。您需要在JavaScript中执行此操作。

如果您希望页面一直刷新,则需要一个计时器。使用jQuery .get()通过AJAX加载局部视图。使用AJAX处理请求时,您可以使用jQuery .ajaxStart().ajaxComplete()来显示和隐藏&#34;正在加载...&#34;标签

.get()

.ajaxStart()

.ajaxComplete()