#c# #asp.net #html #asp.net-mvc-3 #delayed-execution
#c# #asp.net #HTML #asp.net-mvc-3 #отложенное выполнение
Вопрос:
Я делаю высокоуровневую спецификацию для ASP.Net страница, на которой могут быть представлены некоторые отложенные данные.
При загрузке страницы представленные исходные данные будут исходить из локальной базы данных (представление которой будет быстрым). Что я хочу, так это отдельный процесс для выхода и поиска обновленных данных (из любых других сервисов, которые у меня есть). Это отнимает больше времени, но идея состоит в том, чтобы представить данные, а затем, если будут найдены новые данные, добавить их «на лету» в начало существующей страницы.
Я хотел бы получить несколько рекомендаций о том, как это сделать.
Техническая область для этого ASP.Net 4.0, C # MVC3 и HTML5.
Спасибо.
Комментарии:
1. Термин, который вы ищете, — AJAX.
Ответ №1:
AJAX с 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
}
});
});
где действие контроллера загрузки позаботится об обмене данными с удаленными службами и вернет частичное представление, содержащее данные:
public ActionResult Load()
{
var model = ... go ahead and fetch the model from the remote service
return PartialView(model);
}
Теперь, если эта выборка данных требует больших затрат на ввод-вывод, вы могли бы воспользоваться преимуществами асинхронных контроллеров и портов завершения ввода-вывода, что позволит вам не подвергать опасности рабочие потоки во время длительной операции извлечения данных из удаленного источника.