This is a migrated thread and some comments may be shown as answers.

[Solved] Need "refresh rate interval" on ajaxRequest() method

0 Answers 22 Views
Grid
This is a migrated thread and some comments may be shown as answers.
This question is locked. New answers and comments are not allowed.
Dave
Top achievements
Rank 1
Dave asked on 23 Jan 2012, 04:14 PM

Hi,

We are trying to update the ASP.NET MVC Grid Control thru an "automatic refresh" mechanism.  We have the jQuery working sending a POST back to the Controller every 5 mins as it is configured.  However, we cannot get the Grid to "refresh" its data.  I've verified that the "Data" property is being repopulated successfully in the controller (code below), but the grid just doesn't "repaint" itself.  We also found the "ajaxRequest()"method on the Grid control  (which does work like needed) but once it is called it will send a request back to the server every 1 second.  THis obviously does not scale well and could cause too much load on our servers.  We'd like to be able to use the "ajaxRequest()" method with some sort of setting on how frequently it makes requests back to the server.

We are currently evaluating this product suite for multiple license purchase but this isssue is a major deal-breaker.  any assistinace you can provide is greatly appreciated.
Here's the code we're using:

client-side:

@(Html.Telerik().StyleSheetRegistrar()
 
                    .DefaultGroup(group => group
 
                        .DefaultPath("~/App_Themes/Telerik")
 
                        .Add("telerik.common.css")
 
                        .Add("telerik.web20.css")
 
                        .Compress(true))
 
                    )
 
  
 
<style type="text/css">
 
    .statusNewOrReassigned {font-weight:bold;}
 
    .normal {font-weight:normal;}
 
</style>
 
  
 
<div class="inside">
 
    <h1 class="rowTitle">
 
        @Resources.IView.ECommunication.InquiryQueue.PageTitle
 
    </h1>
 
    <div id="gridContent">
 
        @{Html.Telerik().Grid<VCI.ConsumerInternet.Web.UI.Areas.IView.Models.InquiryQueueModel.DisplayMessage>()
 
            .Name("inquiryQueueGrid")
 
//            .ClientEvents(events => events.OnDataBound("onDataBound"))
 
            .Columns(columns =>
 
                {
 
                    columns.Bound(m => m.MessageId)
 
                        .Visible(false);
 
                    columns.Bound(m => m.CreatedTime)
 
                        .ClientTemplate("<span class=\"<#=CssClass#>\"><#= $.telerik.formatString('{0:MM/dd/yyyy hh:mm tt}', CreatedTime)#></span>")
 
                        .Title(@Resources.IView.ECommunication.InquiryQueue.Grid.Header.MessageReceivedDate)
 
                        .Width(150);
 
                    columns.Bound(m => m.Topic)
 
                        .ClientTemplate("<span class=\"<#=CssClass#>\"><#=Topic#></span>")
 
                        .Title(@Resources.IView.ECommunication.InquiryQueue.Grid.Header.Topic)
 
                        .Width(225);
 
                    columns.Bound(m => m.SlaStatusIconPath)
 
                            .Title(@Resources.IView.ECommunication.InquiryQueue.Grid.Header.SLAStatus)
 
                            .Filterable(false)
 
                            .Width(30)
 
                            .ClientTemplate("<#= SlaStatusIconPath #>");
 
                    columns.Bound(m => m.Message)
 
                        .ClientTemplate(Html.ActionLink("<span class=\"<#=CssClass#>\"><#=Message#></span>", "ManageInquiry", new { inquiryId = "<#=MessageId#>" }, new { @id = "<#=MessageId#>", @onclick = "javascript:GetAssigned(this);return false;" })
 
                        .ToString())
 
                        .Title(@Resources.IView.ECommunication.InquiryQueue.Grid.Header.Inquiry);
 
                    columns.Bound(m => m.AccountNumber)
 
                        .ClientTemplate("<span class=\"<#=CssClass#>\"><#=AccountNumber#></span>")
 
                        .Title(@Resources.IView.ECommunication.InquiryQueue.Grid.Header.Account)
 
                        .Width(130);
 
                    columns.Bound(m => m.Status)
 
                        .ClientTemplate("<span class=\"<#=CssClass#>\"><#=Status#></span>")
 
                        .Title(@Resources.IView.ECommunication.InquiryQueue.Grid.Header.Status)
 
                        .Width(70);
 
                    columns.Bound(m => m.AssignedTo)
 
                        .ClientTemplate("<span class=\"<#=CssClass#>\"><#=AssignedTo#></span>")
 
                        .Title(@Resources.IView.ECommunication.InquiryQueue.Grid.Header.AssignedTo)
 
                        .Width(80);
 
                    columns.Bound(m => m.BusinessUnit)
 
                        .ClientTemplate("<span class=\"<#=CssClass#>\"><#=BusinessUnit#></span>")
 
                        .Title(@Resources.IView.ECommunication.InquiryQueue.Grid.Header.BusinessUnit)
 
                        .Width(90);
 
                })
 
            .DataBinding(dataBinding =>
 
            {
 
                dataBinding.Ajax().Select("InquiryQueue", "ECommunication");
 
            })
 
            .Filterable()
 
            .Pageable()
 
            .Pageable(p => p.PageSize(25))
 
            .Sortable()
 
            .Render();}
 
    </div>
 
</div>
 
<br /><br />
 
  
 
<script type="text/javascript">
 
    var refreshInterval = "@Model.QueueRefreshRateInSeconds" * 1000;  //convert to milliseconds
 
    $(document).ready(function () {
 
        var refreshId = setInterval(function () {
 
            $("#gridContent").load(location.href + " #gridContent");
 
  
 
            var grid = $("#inquiryQueueGrid").data('tGrid');
 
            //grid.ajaxRequest();
 
  
 
        }, /*refreshInterval*/ 5000);
 
  
 
        $.ajaxSetup({ cache: false });
 
    });
 
  
 
//    function onDataBound() {
 
//        var grid = $(this).data('tGrid');
 
//        grid.ajaxRequest();
 
//    }
 
  
 
    function GetAssigned(link) {
 
        $.ajax({
 
            async: false,
 
            type: "POST",
 
            url: "IsMessageInProgress",
 
            data: JSON.stringify({ "inquiryId": link.id }),
 
            dataType: "json",
 
            contentType: "application/json; charset=utf-8",
 
            traditional: true,
 
            success: function (data) {
 
                if (data == true) {
 
                    errorDialog('This inquiry cannot be opened since it is being worked upon by another CSR.');
 
                }
 
                else {
 
                    manageInquiry(link.id);
 
                }
 
            },
 
            error: function (xhr, ajaxOptions, thrownError) {
 
                alert(xhr, ajaxOptions, thrownError);
 
                errorDialog('There was an error somewhere!');
 
            }
 
        });
 
    }
 
  
 
    function inquiryQueueView() {
 
        var url = "InquiryQueue";
 
        $(location).attr('href', url);
 
    }
 
  
 
    function manageInquiry(id) {
 
        var url = "ManageInquiry?inquiryId=" + id;
 
        $(location).attr('href', url);
 
    }
 
  
 
    function errorDialog(errorString) {
 
        var newDiv = $(document.createElement('div'));
 
        newDiv.html(errorString);
 
        newDiv.dialog(
 
        {
 
            buttons: { 'ok': { text: 'Ok', click: function () { inquiryQueueView(); } } },
 
            closeOnEscape: false,
 
            modal: true
 
        });
 
    }  
 
</script>
 
  
 
@Html.Telerik().ScriptRegistrar().DefaultGroup(group => group.DefaultPath("~/ClientScripts/Telerik/2011.3.1115").Compress(true))

[GridAction]
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public ActionResult InquiryQueue()
{
    var inquiryQueueModel = new InquiryQueueModel()
    {
        AppPath = BasePageData.AppPath,
        QueueRefreshRateInSeconds = WebConfigurationManager.AppSettings[Constants.IVIEW_MESSAGE_INQUIRY_QUEUE_REFRESH_RATE_IN_SECONDS]
    };
 
    var statusesToDisplay = new List<ECommunicationMessageStatus> { ECommunicationMessageStatus.InProgress, ECommunicationMessageStatus.New, ECommunicationMessageStatus.Reassigned };
 
    IEnumerable<ECommunicationMessage> originalMessages;
 
    try
    {
        originalMessages = InjectedServices.ECommunicationService.GetECommunicationMessagesByStatus(_GetCultureBasedOnIsCanadianUserFlag(), statusesToDisplay);
    }
    catch (Exception)
    {
        Debug.WriteLine("foo");
        throw;
    }
 
    List<InquiryQueueModel.DisplayMessage> messagesForDisplay = new List<InquiryQueueModel.DisplayMessage>();
 
    foreach (var message in originalMessages)
    {
        var displayMessage = new InquiryQueueModel.DisplayMessage()
            {
                MessageId = message.MessageId.ToString(),
                CreatedTime = message.CreatedTime,
                AccountNumber = message.AccountNumber,
                Message = message.Message.Length > 30 ? message.Message.Chop(27) + "..." : message.Message,
                SlaStatusIconPath = _GetSlaStatusIconHtml(message),
                Status = message.Status.ToString(),
                Topic = message.Topic.Translations.Values.FirstOrDefault(),
                AssignedTo = message.AssignedTo,
                BusinessUnit = message.Topic.BusinessUnits.FirstOrDefault().ToString(),
                CssClass = (message.Status == ECommunicationMessageStatus.New || message.Status == ECommunicationMessageStatus.Reassigned) ? "statusNewOrReassigned" : "normal"
            };
        messagesForDisplay.Add(displayMessage);
    }
 
    // order by Date asscending (oldest on top) as default
    inquiryQueueModel.Data = messagesForDisplay.OrderBy(m => m.CreatedTime);
 
    return View(inquiryQueueModel);
}
Tags
Grid
Asked by
Dave
Top achievements
Rank 1
Share this question
or