如何解决使用数据表C#MVC使页面加载变慢
我正在尝试清理解决方案中的某些页面。页面或表的加载速度比我想要的慢。我正在使用视图模型,并在表的页面上执行Foreach,然后使用数据表进行显示。似乎在数据库端它一次加载每个记录1,而有1000条记录则需要很长时间才能加载。当我在SQL中运行查询时,它会立即被填充。我正在寻找一些帮助来清理代码,并查看此处是否可以进行更改以使其加载更快。由于我在页面中使用了foreach,因此DeferRender无法正常工作。对于我来说,使用此脚本还是JavaScript都没有关系,当然可以选择服务器端编码。在控制器中,使用数组也可能有效,但我不知道如何将其与视图模型合并。 “ db.Companys.ToArray();”据我所知,它可以用于从模型中提取数据,但是ToArray不适用于viewModel。
下面是我的代码。
控制器:
public ActionResult Index()
{
var data = (from temp in db.TopLvlJobs
join serial in db.SerialNumbers on temp.TopLvlJob equals serial.TopLvlJob
select new TopLvlJobsViewModels
{
PartNumber = temp.PartNumber,Description = temp.Description,ExtDescription = temp.ExtDescription,Drawing = temp.Drawing,IsDelete = false,CreatedDate = DateTime.UtcNow,UpgradeAvailable = temp.UpgradeAvailable,TopLvlJob = temp.TopLvlJob,SerialNumber = serial.SerialNumber
}).OrderBy(x => x.CreatedDate);
return View(data);
}
ViewModel:
public class TopLvlJobsViewModels
{
[Key]
[Display(Name = "TopLvlJob")]
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public string TopLvlJob { get; set; }
[Display(Name = "Description")]
[Required]
public string Description { get; set; }
[Display(Name = "Ext Description")]
[Required]
public string ExtDescription { get; set; }
[Display(Name = "Part Number")]
[Required]
public string PartNumber { get; set; }
[Display(Name = "Drawing")]
[Required]
public string Drawing { get; set; }
[UIHint("_IsStatus")]
[Display(Name = "Upgrade Available ?")]
[Required]
public bool UpgradeAvailable { get; set; }
public DateTime? CreatedDate { get; set; }
public string CreatedBy { get; set; }
public DateTime? UpdatedDate { get; set; }
public string UpdatedBy { get; set; }
public bool? IsDelete { get; set; }
[Display(Name = "Serial")]
public string SerialNumber { get; set; }
public TopLvlJobs topsjobs { get; set; }
public HttpPostedFileBase Pdfupload { get; set; }
public virtual IEnumerable<SubJobs> SubJobs { get; set; }
public virtual IEnumerable<Upgrades> Upgrade { get; set; }
}
.CHTML页面上的JavaScript
$(document).ready(function () {
//var oTableMenuPermission = "";
//oTableMenuPermission =
$("#SubJobsListTable").dataTable({
"bRetrieve": true,"bProcessing": true,"dom": 'lBfrtip',"buttons": [
{ extend: 'copyHtml5',exportOptions: { columns: ':visible' } },{ extend: 'excelHtml5',{ extend: 'csvHtml5',{ extend: 'pdfHtml5',{ extend: 'print','colvis'
],columnDefs: [{ visible: false,targets: [3] },{ orderable: false,targets: [2,3,4,5,6,7,8] }],"pageLength": 10,"lengthMenu": [[5,10,25,50,-1],[5,"All"]],});
//table.buttons().container()
// .appendTo($('.col-lg-8:eq(0)',table.table().container()));
});
我可以为您提供任何其他所需的东西,由于篇幅太长,我没有发布整个CHTML页面,但这只是表视图中的基本Foreach。
感谢您的帮助!
解决方法
使用IQueryable而不是IEnumerable并尝试
从数据库查询数据,IEnumerable在服务器端执行选择查询,在客户端将数据加载到内存中,然后过滤数据。 从数据库查询数据,IQueryable使用所有过滤器在服务器端执行选择查询。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。