每次刷新页面时重新加载数据表

Posted

技术标签:

【中文标题】每次刷新页面时重新加载数据表【英文标题】:Reload DataTable on Every Page Refresh 【发布时间】:2020-06-17 17:56:32 【问题描述】:

我要做的就是在重新加载/刷新页面时刷新我的 DataTable。现在在刷新页面时,它会保留其数据。我的应用程序使用 ASP.Net MVC 技术。 这是我的数据表和相关函数:

$(document).ready(function () 


    //debugger;
    var table = $('#user_session_center_grid').DataTable(
        "searching": false,
        "colReorder": true,
        "lengthChange": false,
        "processing": true,
        "serverSide": true,
        "autoWidth": false,
        "ajax": 
            cache: false,
            url: "@Url.Action("GetUserSessionHistory", "LoggedIn")",
            type: 'POST',
            data: function (data) 
                data.SortBy = 'Month';
                data.FromDate = "";
                data.ToDate = "";
                data.userSearch = $('#userSearch').val();
                if (event) 
                    var objDtFilter = event.target;
                    if ($(objDtFilter).hasClass('dtFilter')) 
                        data.FromDate = event.target.getAttribute('fromdt');
                        data.ToDate = event.target.getAttribute('todt');
                    
                    if ($(objDtFilter).hasClass('dtSort'))
                        data.SortBy = event.target.getAttribute('sort');
                    if ($(objDtFilter).hasClass('UserTypeFilter'))
                        data.value1 = event.target.getAttribute('value');
                    console.log(data.value1);
                
            ,
        ,
        "language": 
            oPaginate: 
                sNext: '<i class="fa fa-chevron-right"></i>',
                sPrevious: '<i class="fa fa-chevron-left"></i>',
                sFirst: '<i class="fa fa-chevron-right"></i>',
                sLast: '<i class="fa fa fa-chevron-left"></i>'
            
        ,
        "columns": [
            
                data: null,
                class: "userName",
                render: function (data, type, row) 
                    return "<div>" + data.FirstName + " " + data.LastName + "</div></td>";
                
            ,

            
                data: null,
                class: "startDate",
                render: function (data, type, row) 
                    var parsedDate = JSON.parse(JSON.stringify(data.StartTime), TojavascriptDate);
                    return "<div>" + parsedDate + "</div></td>";
                
            ,

                // 'data': 'User_ID' ,
                // 'data': 'FirstName' ,
                // 'data': 'LastName' ,
                // 'data': 'StartTime' ,
        ],
    );

   table.on('draw', function () 
       var widthofPagination = $('.dataTables_paginate.paging_simple_numbers').width() + 25;
       $('#user_session_center_grid_info').css( width: 'calc(100% - ' + widthofPagination + 'px)' );

   );
    $("#date_filter_ul.dropdown-menu li a").click(function () 
        //debugger;
        $('#date_filter_ul').removeClass('show');
        $(this).closest('#CategoryFilter').find('.csp-select > span').text("Duration:" + $(this).text());
        $('#user_session_center_grid').DataTable().ajax.reload();
    );

    $("#user_session_center_status_ul.dropdown-menu li a").click(function () 
        $('#user_session_center_status_ul').removeClass('open');
        $(this).closest('#StatusFilter').find('.csp-select > span').text($(this).text());
        $('#user_session_center_grid').DataTable().ajax.reload();
    );
);

这是我的控制器功能:

public ActionResult UserSessionCenter()
    
            if (Session["selectedCustomer"] == null)
            
                Session["selectedCustomer"] = 9;
            

            int customerId = (int)Session["selectedCustomer"];
            var model = new UserSessionHistory();
            var daccess = new ApplicationCommon.Ado.SqlDataAccess();
            var customerNamesDt = daccess.GetUserNames(customerId);
            var customerList = new List<UserSessionData>();
            for (var i = 0; i < customerNamesDt.Rows.Count; i++)
            
                var userinfo = new UserSessionData();
                userinfo.CustomerId = customerNamesDt?.Rows[i]["Customer_Id"].ToString() ?? "";
                userinfo.CustomerName = customerNamesDt?.Rows[i]["Customer_Name"].ToString() ?? "";
                userinfo.UserId = customerNamesDt?.Rows[i]["User_ID"].ToString() ?? "";
                userinfo.UserName = customerNamesDt?.Rows[i]["UserName"].ToString() ?? "";
                customerList.Add(userinfo);
            
            model.UserInfoList = customerList;
        return View(model);
    

    [HttpPost]
    [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
    public JsonResult GetUserSessionHistory()
    
        var draw = Request.Form.GetValues("draw").FirstOrDefault();
        var start = Request.Form.GetValues("start").FirstOrDefault();
        var length = Request.Form.GetValues("length").FirstOrDefault();
        if (Request["value1"] != null)
            Session["userId"] = Request["value1"]; 
        int pageSize = length != null ? Convert.ToInt32(length) : 0;
        try
        
            var UserID = Convert.ToInt32(Session["userId"]);
            var filterModel = new FilterSessionHistoryModel();
            filterModel.UserID = UserID;
            filterModel.Skip = int.Parse(start);
            filterModel.Take = int.Parse(length);
            var fromDate = Request["FromDate"];
            var toDate = Request["ToDate"];
            filterModel.userSearch = Request["userSearch"];
            if (!string.IsNullOrEmpty(fromDate) && !string.IsNullOrEmpty(toDate))
            
                filterModel.DateFrom = fromDate;
                filterModel.DateTo = toDate;
            
            UserService userService = new UserService();
            List<ADM_User_Session_History_Result> SessionList = userService.ADM_User_Session_History(filterModel);
            int? numberOfRecords = 0;
            if(SessionList.Count>0) 
                numberOfRecords=SessionList[0].NumberOfRecords;
            
            return Json(new  draw = draw, recordsFiltered = (int)numberOfRecords, recordsTotal = (int)numberOfRecords, data = SessionList , JsonRequestBehavior.AllowGet);
        
        catch (Exception ex)
        
            CustomLogging.LogMessage(ex.Message + "/r/n" + ex.Source + "/r/n" + ex.StackTrace, LogType.Error);
            return this.GetJSONObject(false, ex.Message.ToString());
        
    

层次结构是这样的。 1. Admin用户可以使用任何客户 2.一个客户可以有多个用户 3. 该表显示所选用户的登录时间。

问题是管理员可以通过其更改客户的列表位于 _Layout.cshtml 中的顶部导航中,而此数据表位于另一个视图中。更改用户时数据会正常更改,但是当客户更改时我需要它重新加载或变空。

【问题讨论】:

如何将数据绑定到数据表?显示您的代码 它应该刷新数据表——如果你没有使用静态内容。 你好@Mark。我的代码到处都是,因此很难粘贴到这里。我实际上是使用创建复杂类型 SP 的实体框架来绑定我的数据。 @TahaAzhar 至少发布数据表脚本和控制器操作 @Jerdine 我已经发布了代码, 【参考方案1】:

像“explorer”这样的旧浏览器会不断缓存来自第一个 ajax 调用的信息, 您可以尝试将 cash 标志设置为 false,并且每次都会更新表格

function ReLoadTable() 
        $.ajax(
            cache: false,
            url: 'Your URL',
            type: 'POST',

在控制器中放置这个属性

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public class HomeController : Controller

最后在你的 Global.asax 文件中添加这个函数

protected void Application_PreSendRequestHeaders(Object sender, EventArgs e)
    
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetAllowResponseInBrowserHistory(false);
    

【讨论】:

嘿欧文。感谢您的回复,但它似乎无法解决我遇到的问题。 我是缓存问​​题,尝试用 [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] 装饰你的控制器 还是不行。我认为即使重新加载视图后,数据表中数据库中的数据仍会保留在那里。 如果数据库中的数据没有改变,你希望如何改变你的视图? 我的功能是管理员用户可以切换并查看应用程序中每个用户的数据。当一个用户的数据显示在数据表中时,在选择另一个用户时,前一个用户的数据保留在表中。我希望数据表显示每次选择新用户时都没有数据。更改用户时也会刷新页面。

以上是关于每次刷新页面时重新加载数据表的主要内容,如果未能解决你的问题,请参考以下文章

YDN-DB - 删除数据库,然后在页面加载/重新加载时重新创建和加载,但在刷新时不加载

Firefox 在页面刷新时重新发布到 iframe

如何让按钮在发送时刷新页面,并且在重新加载时同时使用相同的按钮让 iframe 滚动到框架的底部

Vue页面重新加载刷新数据配置

尽管页面刷新,如何保持计数器倒计时?

Android 组件导航如何防止地图页面在每次点击时刷新