C# 如何在MVC中使用页面加载指示器/进度条

C# 如何在MVC中使用页面加载指示器/进度条,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,这是我的模型: public class Pitchermodels { InsideEdEntities ieEntity = new InsideEdEntities(); PitcherProfileEntities ppEntity = new PitcherProfileEntities(); Pitcher5model p5Mod = new Pitcher5model(); Pitcher6model p6Mod = new Pitcher6model(); public Pi

这是我的模型:

public class Pitchermodels
{
InsideEdEntities ieEntity = new InsideEdEntities();
PitcherProfileEntities ppEntity = new PitcherProfileEntities();

Pitcher5model p5Mod = new Pitcher5model();
Pitcher6model p6Mod = new Pitcher6model();

public Pitcher5model pitcher5(long? _pid)
    {
        if (p5Mod.exist(_pid) == true)
        {
            p5Mod.playerinfo = ieEntity.ppsproc_playerinfo(_pid).FirstOrDefault();
            p5Mod.ListP5T1 = ppEntity.ppsproc_newP5_T1(_pid).ToList();
            p5Mod.ListP5T2 = ppEntity.ppsproc_P5_T2(_pid).ToList();
            return p5Mod;
        }
        else
        {
            return null;
        }
    }

 public Pitcher6model pitcher6(long? _pid)
    {
        if (p6Mod.exist(_pid) == true)
        {
            p6Mod.playerinfo = ieEntity.ppsproc_playerinfo(_pid).FirstOrDefault();
            p6Mod.ListP6T1 = ppEntity.ppsproc_P6(_pid).ToList();
            return p6Mod;
        }
        else
        {
            return null;
        }
    }
}
这是我的控制器:

public ActionResult AllPitchers(long? _pid)
    {
        Pitchermodels pMods = new Pitchermodels();
        return View(pMods);
    }
以下是我的观点:

@model MVCdodgersplayerinfohub.Models.Pitchermodels
@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>All Pitcher Reports</title>
<link href="~/LA.ico" rel="shortcut icon" type="image/x-icon" />

</head>
<body>
    <div>
        @Html.Partial("Pitcher5",Model.pitcher5(Convert.ToInt32(Request.QueryString["_pid"])))
    </div>
    <p style="page-break-before:always;"></p>
    <div>
        @Html.Partial("Pitcher6",Model.pitcher6(Convert.ToInt32(Request.QueryString["_pid"])))
    </div>
</body>
</html>
@model MVCdodgersplayerinfohub.Models.Pitchermodels
@{
布局=空;
}
所有投手报告
@Html.Partial(“pitchr5”,Model.pitchr5(Convert.ToInt32(Request.QueryString[“\u pid”]))

@Html.Partial(“pitchr6”,Model.pitchr6(Convert.ToInt32(Request.QueryString[“\u pid]”)))

有一件事不太好,那就是加载可能需要2分钟以上的时间,而且用户觉得它甚至可能无法加载(鼠标只是旋转)。是否可以在进度条中输入内容?我认为大多数用户喜欢进度条,因为至少他们知道它在工作,以及需要多长时间。

关于浏览器的工作原理,您需要了解以下几点:

  • 如果正在打开页面,则在连接关闭之前不会显示任何内容。图像和其他内容稍后由浏览器解析,以便 它们在第一页打开后打开
  • 除非您知道所接收数据的大小,否则无法确定页面打开的当前状态。为此,页面必须开始发送数据,并且您需要确切地知道数据有多大。例如,文件具有数据的设置大小,因此可以使用Javascript将进度条附加到该文件。所有数据都在服务器上处理,而浏览器仍在等待响应
  • 您需要在前端(html端)进行某种跟踪。这意味着您至少需要打开某种基本的页面外壳,以便跟踪事务。这可以通过使用AJAX加载部分网站并粗略估计打开所需的时间来完成(并将其应用于与时间相关的进度条)。将进度条分解为加载段(即加载1/4段,进度条为1/4段)将在此设置中起作用
我在这里看到的真正问题是,你正在寻找一个快速的解决方案,而不是试图射杀房间里的大象。2分钟对于一个网站来说是一个很长的加载时间,这意味着在你的控制器中发生了一些事情,这些事情占据了你的加载时间。在今天的互联网上,发送HTML所需的时间非常快,所以这不是问题的根源。您可以按照以下几个步骤来帮助查找问题:

  • 查看您的数据库调用。您是否多次调用数据库以获取您可能已经拥有的数据
  • 您正在加载的数据非常大。您是否正在加载整个表,而不仅仅是所需的列?你要加入非常大的桌子吗
  • 如果这依赖于(比如)一个文件来加载数据,那么是否有其他东西在使用该文件并且程序正在等待访问
  • 看看你的收藏。你又在分类、求助和分类了吗?您是否在不同的集合类型之间进行转换(例如,从LinkedList到Array再到List再到其他类型)?如果您有大量集合,您正试图通过C#进行排序,您是否可以在其他地方对它们进行排序,例如在数据库查询中
  • 在什么情况下你的页面会变慢?尽管数据量相同,但是否有页面打开速度更快?如果是这样,瓶颈可能发生在一个非常特定的地方
  • 你是在慢速服务器上运行的吗?这会对性能产生巨大影响
这些只是少数。2分钟太长了,随着网站的进一步发展,时间会变得更糟。对于那些处理简单数据收集的简单网站来说,即使在繁忙的一天,你也不可能不遇到任何潜在的问题。如果你的网站被大量使用,而你的代码速度很慢,那么看看最常见的代码段,并尝试先对它们进行优化;然后继续优化其他使用较少的代码段


如果你在性能上有很大的麻烦,在优化了绝大多数网站之后,考虑使用Ajax和部分视图。虽然它们不会提高您的总体性能,但它将允许您分段打开网站,提供更多的视觉反馈,告诉用户页面仍在加载。

是的。您可以在组件中使用等待弹出窗口等待加载时间。例如,如果使用等待弹出组件,请在.ajaxStart()事件中调用弹出窗口,并在AjaxComplete事件中关闭等待弹出窗口

请检查下面的ajax事件以供进一步参考