Я думаю, что решение, которое вы ссылка будет работать для вас. Вам просто нужно, чтобы ваше начальное действие контроллера немедленно возвращалось с «пожалуйста, подождите сообщение», а затем вызов AJAX выполняет фактическое извлечение содержимого на основе вашей обработки. Если запрос действительно занимает 5-10 секунд, вам также может потребоваться отрегулировать значение тайм-аута по запросу AJAX, чтобы он смог выполнить. Я не знаю, что такое таймаут по умолчанию, но может быть меньше того, что вам нужно.
EDIT Пример:
Посмотреть код:
<script type="text/javascript">
$(document).ready(function() {
$.ajax({
type: "POST",
url: '<$= Url.Action("GetSlowData","Controller") %>',
data: 'id=<%= ViewData["modelID"] %>',
timeout: 15000, // wait upto 15 secs
success: function(content){
$("#container").html(content);
}
});
});
</script>
...
<div id="#container">
Please wait while I retrieve the data.
</div>
Контроллер
public ActionResult ViewMyData(int id)
{
ViewData["modelID"] = id;
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult GetSlowData(int id)
{
var model = ... do what you need to do to get the model...
return PartialView(model);
}
Вам также потребуется частичный вид (ViewUserControl), который принимает модель и визуализирует вид модели. Обратите внимание, что это не является полным - вам нужно будет добавить обработку ошибок, вы можете подумать о том, что произойдет, если javascript не включен, ...
Я не вижу никакого способа сделать это без используя AJAX - я знаю, что это не то, что вы хотите услышать, но ASP.Net не отправит * никакой * части ответа до тех пор, пока обработка не будет завершена на сервере. В то время как jQuery AJAX сможет сделать это для вас после отправки ответа. –