2015-12-03 89 views
0

我正在開發一個MVC應用程序網站,並遇到了一個障礙,我寫了一個名爲「AlertCheckFunction」的HomeController函數,它應該檢查某些條件然後添加消息到一個字符串列表,然後將此列表添加到ViewBag.Message,並在HTML視圖中輸出。我正在嘗試編寫一個設置在計時器上的Jquery函數,以便這些提示將每隔一定的秒數重新檢查一次標準,並將它們重新輸出到我在jquery中的自動滾動條中。需要幫助調用函數裏面的jquery定時功能

第138-138行是我的自動滾動條,當它將文本放入html中的無序列表中時它工作的很好,但是當我用Razor調用viewbag時,無法輸出任何內容。 Line 141-16 2是我設置定時器查詢函數然後調用我的c#函數的所有不同嘗試,我已經獲得了一個警告框來處理定時器。

但我不知道如何正確調用該功能。 Problem

$(document).ready(function() { 
     $('.dropdown-toggle').dropdown(); 
     $('.dropdown-toggle').click(function (e) { 
      e.stopPropagation(); 
      e.preventDefault(); 
      }); 
     });   

     function tick() { 
      $('#ticker li:first').slideUp(function() {   $(this).appendTo($('#ticker')).slideDown(); }); 
     } 

     setInterval(function() { tick() }, 5000); 



    //window.setInterval(AlertCheckFunction, 5000); 

    //function AlertCheckFunction() { alert('test'); } 

     //window.setInterval(function() { 
     // $('AlertCheckFunction'); 
     //}, 2000); 


// function alert() { 
//  $('AlertCheckFunction') 
// } 

// setInterval(function() { alert() }, 60000) 

//window.setInterval(function() { 

//$.get('AlertCheckFunction', function(result) { 

//}); 
//}, 3000); 
</script> 

家居控制器

 public ActionResult AlertCheckFunction() 
    { 
     List<String> Messages = new List<String>(); 


     foreach (var i in db.Ingredients) 
     { 

      if (i.Quantity < i.ReOrderPoint) 
      { 
       Messages.Add("The quantity of " + i.IngredientName + "Is less than the ReOrderPoint, Suggest placing another order for this ingredient!"); 

      } 
      else 
      { 
       Messages.Add("No alerts from Ingredeints"); 
      } 

     } 




     foreach (var c in db.Customers) 
     { 
      if (DateTime.Now == c.Birthday) 
      { 
       Messages.Add("It is " + c.Name + "'s" + "Birthday Today!"); 
      } 
      else 
      { 
       Messages.Add("No alerts from Customer!"); 
      } 
     } 




     foreach (var i in db.Inventories) 
     { 
      if (i.InvQuantity <= 5) 
      { 
       Messages.Add("The Inventory of " + i.Name + "Is less than or equal to 5, Consider making new batch"); 
      } 
      else 
      { 
       Messages.Add("No alerts from Inventories"); 
      } 
     } 



     //DateTime lastMonth = DateTime.Now.AddMonths(-1); 
     //DateTime twoMonthsAgo = DateTime.Now.AddMonths(-2); 

     //var sales = db.Sales.Where(j => j.SaleId).ToList(); 

     // foreach (var x in db.Sales) 
     // { 
     //  var alerts = db.Sales.Where(x => x.SaleId.Count); 

     ViewBag.Message = Messages; 

     return RedirectToAction("Index", "Home"); 
    } 






    HTML 



    <div> 
        <ul id="ticker"> 
         @if (ViewBag.Messages != null) 
         { 
          foreach (var v in ViewBag.Message) 
          { 
           <li> 
            @v 
           </li> 
          } 
         } 
        </ul> 
    </div> 
+0

公衆的ActionResult是我的我的家控制器上的代碼開始和底部的DIV是我叫它在html中。任何幫助和最簡單,最平凡的解決方案,將不勝感激,其1:30在總決賽周,我的批判性思維技能是關於立即拍攝,因此很難理解任何事情現在ha –

+0

請正確格式化您的代碼。 –

回答

0

的 鏈接我想你混淆了一堆的Javascript和MVC代碼。如果位於HomeController中,則不能從Javascript調用方法AlertCheckFunction

您可以做的是確保該方法可用作控制器操作並可通過類似/Home/AlertCheckFunction的URL訪問。

您的嘗試$.get是最接近答案。檢查該函數及其響應(最好使用JSON)在URL中是否可用,並按以下模式進行調用。

setInterval(function() { 
    $.get('/Home/AlertCheckFunction', function (resp) { 
     console.log(resp); // This will be the JSON response. 
    }); 
}, 3000); 

您可能還想傳遞任何您想要在該函數中檢查的參數。參數可以作爲查詢字符串傳遞。更多的信息在這裏 Use querystring variables in MVC controller

+0

謝謝你,這有點幫助,但我對ajax或Json並不熟悉,我不確定該從哪裏出發 - 如果有幫助,我發佈了更多我的代碼 –

+0

查看上面的答案。將函數的返回類型更改爲JsonResult(雖然它也可以與ActionResult一起使用,但通過這種方式更清晰)。一旦你構建你的列表,只需將它們放入一個JSON字符串中,如下所示:return Json(new {Messages = messages}); – RekaB

0

而不是將您的項目放在控制器中的ViewBag,請嘗試返回一個JSON字符串與您要放入您的警報框中的消息。然後,您的代理商可以對您的控制器進行ajax調用並獲取新的警報。

或者,您可以查看angular,knockout或ember之類的東西,當背後的數據發生變化時,會爲您更改您的DOM - 如果您的結構是正確的。

在你的控制器:

public JsonResult GetAlerts() 
{ 
    return Json(Alerts, JsonRequestBehavior.AllowGet); 
} 

而在你的看法:

$.ajax({ 
    url: '@Url.Action("GetAlerts")', 
    // data: {'alertType': 1}, if you wanted to send some data. The parameter name will have to be _exactly_ the same 
    type: 'GET', 
    success: function (response) { 
     $("#alertsDiv").html(response); 
} 
});