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);
    }

Ajax调用工作缓慢.可以做得很快

更新数据库查询的一种方法是不使用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传递给数据库,而不是在代码中执行。