Как сделать пейджинг в MVC DOT NET? - PullRequest
0 голосов
/ 11 декабря 2019

У меня есть модуль, который показывает все записи из Backhend, но проблема в том, что запись слишком похожа на записи 22k на экране и экране. Вяло и все компоненты работают медленно, поэтому мне приходится делать пейджинг в MVC.

Контроллер

    public string TrafficMovement(string formData)
    {
        try
        {
            formData = HttpUtility.HtmlDecode(formData);
            ReportsAC _obj = new ReportsAC();
            DataSet dataset = new DataSet();
            ReportsMapper mapper = JsonConvert.DeserializeObject<ReportsMapper>(formData);
            UserSession userSession = (UserSession)Session["userSession"];

            mapper.Company_Id = userSession.Company_Id;

            dataset = _obj.TrafficMovementAC(mapper);


            return "{\"Status\":true , \"Message\":\"success\" ,\"Data\": " + JsonConvert.SerializeObject(dataset) + "}";
        }
        catch (Exception ex)
        {

            return "{\"Status\":false , \"Message\":\"" + ex.Message.ToString() + "\"}";
        }
    }

jQuery

функция Traffic_Movement () {

try {

    var url = "/Reports/TrafficMovement";
    var dataString = {};
    ShowLoader();
    //dataString.Report_Period = $("#Report_Period").val();

    dataString.tfMonth = $("#tffMonth").val();
    dataString.tfYear = $("#tffYear").val();

    AjaxSubmission(dataString, url, $('input[name=__RequestVerificationToken]').val()).done(function (data) {

        if (data.Message == "success") {

            var strHTML = '';
            var strVAL = '';



            if (("#tfbdy") != undefined) {
                $('#count_data').html("TOTAL RECORDS: " + data.Data.Table.length);
               // $("#trBody").html("<tr><td colspan='15'></td></tr>");

            }

            if (data.Data.Table != undefined && data.Data.Table.length > 0) {


                for (var i = 0; i < data.Data.Table.length; i++) {


                   //here i m doing binding work
                }

                $("#tfbdy").html(strHTML);

      }


                 }



                       HideLoader();


 }).fail(function (result) {
        //console.log(result.Message);
        HideLoader();
    });

} catch (e) {
    console.log(e.message);
    HideLoader();
}

    }

Компонент

public DataSet TrafficMovementAC(ReportsMapper mapper)
    {
        try
        {
            SqlParameter[] sqlParameter = new SqlParameter[6];
            sqlParameter[0] = new SqlParameter("@Company_Id", mapper.Company_Id);
            sqlParameter[1] = new SqlParameter("@Branch_Id", mapper.Branch_Id);
            sqlParameter[2] = new SqlParameter("@User_Id", mapper.User_Id);
            sqlParameter[3] = new SqlParameter("@FY_ID", mapper.FY_Id);
            //sqlParameter[4] = new SqlParameter("@Report_Period", mapper.Report_Period );
            sqlParameter[4] = new SqlParameter("@tfMonth", mapper.tfMonth);
            sqlParameter[5] = new SqlParameter("@tfYear", mapper.tfYear);


            dataAccess.ExecuteSelectQueryWithDataSet("SKYBOOKS_TRAFFIC_MOVEMENT_LIST", sqlParameter, out dataSet);
            return dataSet;
        }

        catch
        {
            throw;
        }



    }

Если кто-то предложит мне идею пейджинга, это будет много значить, заранее спасибо.

1 Ответ

0 голосов
/ 12 декабря 2019

Добавьте параметр pageNo и pageSize в метод вашего контроллера. Изначально кэшируйте все данные, извлеченные, если не ожидается, что они будут изменены. Затем в каждом запросе увеличивайте thr pageNo и возвращайте только соответствующую страницу.

Псевдокод

StartIndex = (pageNo x Count) Данные = из StartIndex, StartIndex + pageCount Возвращение dt.rows

...