我在ASP.Net页面上做了一个高级规范,可能会出现一些延迟数据。
当页面加载时,显示的初始数据将来自本地数据库(将快速呈现)。我想要的是一个单独的过程,以寻找更新的数据(来自我拥有的任何其他服务)。这更耗时,但想法是提供数据,然后如果找到更新的数据,则将其即时附加到现有页面的顶部。
我想就如何做到这一点提出一些建议。
技术范围是ASP.Net 4.0,C#MVC3和HTML5。
感谢。
答案 0 :(得分:2)
AJAX with jQuery是实现这一目标的好方法。例如,您可以在标记上放置内容占位符div:
<div id="result" data-remote-url="@Url.Action("Load", "SomeController")"></div>
然后加载DOM后:
$(function() {
$.ajax({
url: $('#result').data('remote-url'),
type: 'POST',
beforeSend: function() {
// TODO: you could show an AJAX loading spinner
// to indicate to the user that there is an ongoing
// operation so that he doesn't run out of patience
},
complete: function() {
// this will be executed no matter whether the AJAX request
// succeeds or fails => you could hide the spinner here
},
success: function(result) {
// In case of success update the corresponding div with
// the results returned by the controller action
$('#result').html(result);
},
error: function() {
// something went wrong => inform the user
// in the gentler possible manner and remember
// that he spent some of his precious time waiting
// for those results
}
});
});
其中Load controller操作将负责与远程服务通信并返回包含数据的部分视图:
public ActionResult Load()
{
var model = ... go ahead and fetch the model from the remote service
return PartialView(model);
}
现在,如果此获取数据是I / O密集型的,您可以利用asynchronous controllers I / O完成端口,这将避免在长时间提取操作期间危及工作线程来自远程来源的数据。