我几天前开始学习ASP.NET MVC,我只是好奇MVC提供的更新视图的功能。我对WPF
有很多经验,它有一个神奇的INotifyPropertyChanged
接口,用于更新属性绑定的UI组件。据我所知,我们可以在Model
中实现这样的界面,然后在不刷新页面的情况下更新View
异步。
所以我的问题是,在不刷新页面的情况下从模型更新视图的最佳做法是什么?我知道在传统的ASP.NET中我们会使用AJAX来实现这一点,但我想知道MVC是否提供了一种更清晰,更“.NETy”的方法来实现它。
因此,例如在我的场景中,我有一个WebGrid绑定到模型中的列表,我有一个计时器,每隔几秒刷新模型中的数据。将这些更改推送到视图的最佳方法是什么? AJAX是唯一的选择吗?
答案 0 :(得分:1)
简而言之,要实现类似于您所描述的行为,需要某种类型的ajax。控制器操作方法中引用的模型与UI之间的连接在每个请求/响应周期中都会中断,因此模型属性的实时更新不会像您在WPF中那样发生。
最简单的方法是使用AngularJS的内容创建SPA,并使用MVC的WebAPI功能公开客户端使用的API。这不会让您获得开箱即用的实时属性更新,但如果这是您的设计目标,一个好的框架将帮助您组织客户端代码并避免页面刷新。
答案 1 :(得分:1)
您可以在控制器上创建返回JsonResult的操作。通过ajax执行该操作,并使用返回的数据更新您的客户端。就像@ maf748建议的那样,如果大多数应用都应该采用这种方式,我会调查web api。
我不知道更多的" .NETy"办法。如果您返回一个视图,那么您将刷新页面,因此您只需返回计划页面即可。 json或xml和句柄在客户端显示更新。