如何以 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的主要内容,如果未能解决你的问题,请参考以下文章
如何在 VIEW MVC3 Razor 中显示 webforms 页面 .aspx
如何将 MVC 操作和属性重写为 ASP Core MVVM Razor 页面