在MVC asp.net中刷新视图

时间:2013-11-05 13:46:31

标签: c# asp.net-mvc asp.net-mvc-4

我有一个视图,其中有不同的部分显示来自DB(SQL Server)的不同类型的订单。现在,每次通过Android应用程序提交新订单时,我都需要使用更新的信息刷新视图。以下是代码段:

视图模型:

public class KitchenViewModel
{
    public List<Orders> DisplayOrders { get; set; }
    public List<Orders> PreparedOrders { get; set; }
    public List<OrderItem> ProgressItems { get; set; }
    public List<OrderItem> QueuedItems { get; set; }
    public int DisplayOrdCount { get; set; }
    public int PreparedOrdCount { get; set; }
    public int QueuedOrdCount { get; set; }
}

控制器:

public ActionResult KitchenOrder()
{
    KitchenModel kitchenInstance = new KitchenModel();

    List<Orders> orders = kitchenInstance.GetProgOrdersList();
    List<OrderItem> progressItems = kitchenInstance.GetItemProgress();
    List<OrderItem> queuedItems = kitchenInstance.GetItemQueued(); 
    List<Orders> prepOrders = kitchenInstance.GetPrepOrdersList();
    List<Orders> queuedOrders = kitchenInstance.GetQueuedOrdersList();
    KitchenViewModel viewModel = new KitchenViewModel();
    viewModel.PreparedOrders = prepOrders;
    viewModel.ProgressItems = progressItems;
    viewModel.DisplayOrders = orders;
    viewModel.QueuedItems = queuedItems;
    viewModel.DisplayOrdCount = orders.Count;
    viewModel.PreparedOrdCount = prepOrders.Count;
    viewModel.QueuedOrdCount = queuedOrders.Count;
    return View(viewModel);
}

截至目前,我每15秒自动刷新视图,效果非常好。 但是,只有在通过Android应用程序提交新订单并且在DB中插入订单时,我才需要刷新视图。提交新订单后,PreparedOrders,Progressitems,DisplayOrders的值将更改,需要再次获取。我已经阅读了许多与Observer模式和发布者/订阅者方法相关的帖子/教程,但无法获得最适合的清晰解决方案。有人可以提供相关的指针/教程,以便在可能有所帮助的场景中使用。作为我的第一个项目和一个初学者,我很困惑如何继续。

1 个答案:

答案 0 :(得分:2)

因此,如果你必须在基础上发生变化时触发的事件更新站点,因为其他客户端已经更改它,你需要基于PUSH的体系结构,而不是像你现在这样做的PULL(计时器上的请求已经过去)。

为此,您可以使用SignalR来实现各种现代通信机制。基本思路是:一次客户端访问您的网站,有一个持久性 创建指向它的浏览器的连接,并在通知的瞬间,您只需滚动所有可用的客户端并通知它们。在客户端,当然,事件是在javascript的情况下处理的。

值得一提的是,此技术在浏览器版本控制方面存在局限性,因此请参阅文档以了解支持的浏览器版本集是否满足您的要求。

以下是SignalR2支持平台列表的链接:Supported platforms