我正在开发一个MVC应用程序网站并且遇到了障碍,我在我的HomeController上编写了一个名为" AlertCheckFunction"那应该检查某些标准,然后将消息添加到字符串列表,然后将此列表添加到ViewBag.Message,并在HTML视图中输出。我正在尝试编写一个在计时器上设置的Jquery函数,以便这些警报将每隔一定的秒数重新检查标准,并将它们重新输出到jquery中的自动代码。
第138-138行是我的自动自动收报机,当它将文本放入html中的无序列表时效果很好,但是当我调用viewbag时我无法输出任何内容用剃刀。 第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 :(得分:0)
我认为你混合了一堆Javascript和MVC代码。如果它位于您的HomeController中,则无法从Javascript调用方法AlertCheckFunction
。
您可以做的是,确保该方法可用作控制器操作,并可在/Home/AlertCheckFunction
等网址上访问。
您对$.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
答案 1 :(得分:0)
不要将您的项目放入控制器中的ViewBag,而是尝试返回一个JSON字符串,其中包含您要放入警报框的消息。然后你的自动收报机可以对你的控制器进行ajax调用并获得新的警报。
或者,您可以查看角度,挖空或余烬之类的内容,当后面的数据发生变化时,它会为您更改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);
}
});