1

Мне нужно получить индикатор выполнения для обновления в зависимости от количества выполненных заданий. Количество заполненных заданий сохраняется в таблице рабочих мест базы данных SQL Server. Мне нужно, чтобы приложение ASP.NET MVC 4 запрашивало БД каждые 3 секунды, чтобы количество заданий конкурировало и использовало эти данные, чтобы обновить индикатор выполнения, который удерживается в частичном представлении. Таймер работает, и он вызывает мое действие _getforStatus в StatusController, и он, кажется, вызывает EntityDB, но никогда не кажется, что он вызывает представление, отличное от того, перед чем говорит таймер. Как я могу обновить индикатор выполнения каждые 3 секунды?Как обновить частичный просмотр каждые 3 секунды в MVC 4?

Заголовок мой взгляд _Layout.cshtml вызывает инициирование таймера, который находится в StatusController так:

<head> 
     ... 
     @Html.Action("InitTimer", 'Status") 
     ... 
</head> 

Кроме того, по мнению _layout я называю частичный вид в Jumbotron как так:

<div class="jumbotron" id=progress"> 
     @{Html.RenderAction("_GetforStatus", "Status");} 
</div> 

контроллер состояния кодируется следующим образом:

public class StatusController : Controller 
{ 
     IntegrationDBEntities _db; 

     Private Timer timer1; 

     Public void initTimer() 
     { 
      timer1 = new Timer(); 
      timer1.elapsed += new ElapsedEventhandler(timer_Elapsed(; 
      timer1.interval = 3000; 
      timer1.Start(); 
     } 

     Private void timer_Elapsed(Object sender, EventArgs e) 
     { 
      _GetforStatus(); 
     } 

     [ChildActiononly] 
     public PartialViewResult _GetforStatus(0 
     { 
      _db = new IntegrationDBEntities(); 
      ViewDataModel - _db.Jobs.ToList(); 
      return partialView(); 
     } 

EDIT: Я также попробовал следующий код Ajax. У меня нет ошибки, но мой прогресс бар не обновляется:

<script> 
     function loadPartialView() { 
      $.ajax({ 
       url: '@url.Action("_GetforStatus', "Status")", 
       type: 'GET', 
       dataType: 'html', 
       success: function(result) { 
         $('progress').html(result); 
       } 
      }); 
     } 

    $function() { 
     loadPartialView(); 
     window.setInterval("loadPartialView()", 3000); 
    }); 
</script> 

Я не уверен, если он не работает до н.э. я не представлял «Html.RenderAction» в JS правильно или что.

+2

Для таких вещей я предпочитаю использовать таймер jquery на вид http://www.sitepoint.com/settimeout-example/. в таймере выполните вызов ajax, чтобы вернуть частичные или просто данные, необходимые для обновления индикатора выполнения. –

+0

Я попытался выполнить другое задание, которое дало решение Ajax аналогичному вопросу, но я не мог заставить его работать. Не могли бы вы показать мне пример, используя мой код выше о том, как именно я реализую это с помощью синтаксиса бритвы? – antman1p

+0

Можете ли вы опубликовать то, что вы попытались с помощью своего ajax-звонка, и сообщить мне, какую ошибку вы получали? –

ответ

2

Я думаю, вам нужно внести некоторые изменения в ваш вызов ajax. Вот пример того, как я звоню

$.ajax({ 
    url: '@Url.Action("Action", "Controller")', 
    type: 'post', 
    cache: false, 
    async: true, 
    data: { id: "frmUser" }, 
    success: function(result){ 
     $('.divPartial').html(result); 
    } 
}); 

на вашем контроллере Я не думаю, что вам нужно только действие ребенка. Также вы возвращаете пустой объект частичного просмотра. Он должен быть

return partialView('_partialName', Model); 

, наконец, в вашем JQuery, чтобы вызов происходит нужно RETRIGGER вызова. Попробуйте что-то вроде этого

$(document).ready(function(){ 
    function RefreshPartial(){ 
     //this will wait 3 seconds and then fire the load partial function 
     setTimeout(function(){ 
      loadPartialView(); 
      //recall this function so that it will continue to loop 
      RefreshPartial(); 
     }, 3000); 
    } 
    //initialize the loop 
    RefreshPartial(); 
}); 
+0

Я помещаю теги сценария вокруг него, или есть способ записать его в Razor? – antman1p

+0

Кроме того, что такое «.divpartial» и «frmUser»? – antman1p

+1

да, это пойдет в ваших тегах скрипта. Это просто пример. Если вы хотите передать что-то обратно контроллеру, вы можете сделать это через атрибут data. Если вы не хотите, вы можете удалить этот атрибут. div partial - это селектор для элемента в форме (например, div), где будет возвращен возвращенный частичный вид. –

Смежные вопросы