如何以 10 秒的间隔在 mvc razor 页面中使用 jQuery 调用方法并将输出附加到 html

Posted

技术标签:

【中文标题】如何以 10 秒的间隔在 mvc razor 页面中使用 jQuery 调用方法并将输出附加到 html【英文标题】:How to call method using jQuery in mvc razor page at 10 sec interval and append output to html 【发布时间】:2019-04-16 11:36:58 【问题描述】:

以下代码一一读取来自 iot hub 的消息。

  private async void MonitorEventHubAsync(DateTime startTime, CancellationToken ct, string consumerGroupName)
    
        EventHubClient eventHubClient = null;
        EventHubReceiver eventHubReceiver = null;

        try
        
            string mesageData = string.Empty;
            int eventHubPartitionsCount;

            string selectedDevice = "";
            eventHubClient = EventHubClient.CreateFromConnectionString("activeIoTHubConnectionString", "messages/events");
            mesageData = "Receiving events...\r\n";
            eventHubPartitionsCount = eventHubClient.GetRuntimeInformation().PartitionCount;
            string partition = EventHubPartitionKeyResolver.ResolveToPartition(selectedDevice, eventHubPartitionsCount);
            eventHubReceiver = eventHubClient.GetConsumerGroup(consumerGroupName).CreateReceiver(partition, startTime);

            //receive the events from startTime until current time in a single call and process them
            while (true)
            
                var eventData = eventHubReceiver.ReceiveAsync(TimeSpan.FromSeconds(1)).Result;

                if (eventData != null)
                
                    var data = Encoding.UTF8.GetString(eventData.GetBytes());
                    var enqueuedTime = eventData.EnqueuedTimeUtc.ToLocalTime();
                    var connectionDeviceId = eventData.SystemProperties["iothub-connection-device-id"].ToString();

                    if (string.CompareOrdinal(selectedDevice.ToUpper(), connectionDeviceId.ToUpper()) == 0)
                    
                        mesageData += $"enqueuedTime> Device: [connectionDeviceId], Data:[data]";

                        if (eventData.Properties.Count > 0)
                        
                            mesageData += "Properties:\r\n";
                            foreach (var property in eventData.Properties)
                            
                                mesageData += $"'property.Key': 'property.Value'\r\n";
                            
                        

                        mesageData += "\r\n";
                    
                
            

        
        catch (Exception ex)
        

        
    

我想使用上面的代码在 mvc cshtml 页面上一一显示消息,我该怎么做?

我可以使用如下的一种方法:

    在cshtml中

      <p id="pValue"></p>
    

    在脚本中

        var someRootPath = "@Url.Content("~")";
          (function randomGenerator() 
             $.ajax(
                 url: someRootPath + 'Home/GetValue',
                 success: function (data) 
                     $('#pValue').html(data.someValue);
                 ,
                 complete: function () 
                     setTimeout(randomGenerator, 1000);
                 
             );
         )();
    

    控制器

     [HttpGet]
     public JsonResult GetValue()
     
         return Json( // call winform method which gives message data);
     
    

【问题讨论】:

您可以使用 Signalr 将消息从后端推送到前端。 为什么在complete 中使用setTimeout?只需在页面加载时执行 为什么不用jquery代码代替signalr? @progrAmmar 您可以提供任何示例代码/链接吗? 更新了我的代码请检查 【参考方案1】:

类似的东西

var someRootPath = "@Url.Content("~")";

$(function()

    randomGenerator();
    setTimeout(randomGenerator, 1000);

);
function randomGenerator() 
    $.ajax(
        url: someRootPath + 'Home/GetValue',
        success: function (data) 
            $('#pValue').html(data.someValue);
        
    );

【讨论】:

以上是关于如何以 10 秒的间隔在 mvc razor 页面中使用 jQuery 调用方法并将输出附加到 html的主要内容,如果未能解决你的问题,请参考以下文章

如何在同一个项目中同时拥有 MVC 和 Razor 页面?

如何在 VIEW MVC3 Razor 中显示 webforms 页面 .aspx

如何将 MVC 操作和属性重写为 ASP Core MVVM Razor 页面

刷新视图以在Razor页面中显示更新的属性

如何使用Objective C以2秒的间隔一张一张地自动滚动图像?

ASP.NET Core 2,使用没有 MVC 的 Razor 页面单击按钮