Ajax调用工作缓慢.可以做得很快
本文关键字:很快 调用 工作 缓慢 Ajax | 更新日期: 2023-09-27 18:26:55
当在asp.net mvc中通过JavaScript和ajax选择索引更改时,我正在填写"ReportToadd"下拉列表表单"ddlLanguage"下拉列表。这项工作很好,但需要很多时间来填充子下拉列表"ReportToadd.它需要4到5秒来填充第二个下拉列表。如何使其快速。请提前帮助和感谢
JavaScript代码:
$(function () {
$('select#ddlLanguage').change(function () {
var languageId = $(this).val();
var projectType ='@(TempData["projectType"])';
$.ajax({
url: "/SEI/Report/FillReport",
type: 'POST',
data: JSON.stringify({ languageId: languageId, projectType: projectType }),
dataType: 'json',
contentType: 'application/json',
success: function (data) {
$("#ReportToAdd").html("");
$.each(data, function (key, result) {
$('select#ReportToAdd').append(
'<option value="' + result.Value + '">'
+ result.Text +
'</option>');
});
}
});
});
});
和下拉列表为:
string projectType = "SEI_ADULT";
@Html.DropDownList("ddlLanguage", SixSeconds.Utils.SelectList<SixSeconds.Models.Language>("Name", ""), new { @id = "ddlLanguage", style = "width:300px;" }) <br />
TempData["projectType"] = projectType;
@Html.DropDownList("ReportToAdd", Enumerable.Empty<SelectListItem>(), new { @id = "ReportToAdd", style = "width:300px;" })
Json方法类似
public JsonResult FillReport(int languageId,string projectType,string selectedValue, bool showCredits = true)
{
DataAccessObject<ReportType> dao = new DataAccessObject<ReportType>();
DataAccessObject<Language> ldao = new DataAccessObject<Language>();
//IEnumerable<ReportType> list = criteria != null ? dao.Filter(criteria) : dao.All().ToList();
IEnumerable<ReportType> list = dao.All().ToList();
IEnumerable<Language> Llist = ldao.All().ToList();
list = list.Where(a => a.ProjectType.ToString() == projectType).ToList();
list = list.OrderBy(r => r.CustomOrder);
List<SelectListItem> result = new List<SelectListItem>();
result.Add(new SelectListItem() { Value = "", Text = "" });
foreach (ReportType t in list)
{
foreach (Language l in t.Languages.Where(a=>a.Id==languageId).ToList())
{
string displayText = t.Name + " (" + l.Name + ")" + (showCredits ? " - " + (t.Code == "BTP" ? 10 : t.Credits) + " " + App_GlobalResources.FieldLabels.Credits : "");
string value = t.Id + "-" + l.Id + "-" + (t.Code == "BTP" ? 10 : t.Credits) + "-" + t.Code + "-" + l.Code.Replace("-", "_");
result.Add(new SelectListItem() { Selected = (selectedValue == value), Value = value, Text = displayText });
}
}
return Json(result);
}
更新数据库查询的一种方法是不使用All
并向下传递Where
。
此外,Llist
从未使用过,因此您可以免费从数据库中获取所有语言。
尝试:-
//IEnumerable<Language> Llist = ldao.All().ToList();
IEnumerable<ReportType> list = dao.Where(a => a.ProjectType.ToString() == projectType)
.OrderBy(r => r.CustomOrder).ToList();
而不是:-
IEnumerable<ReportType> list = dao.All().ToList();
IEnumerable<Language> Llist = ldao.All().ToList();
list = list.Where(a => a.ProjectType.ToString() == projectType).ToList();
list = list.OrderBy(r => r.CustomOrder);
这将把where和order传递给数据库,而不是在代码中执行。