The Data Moving Plug-in contains everything is needed to implement an advanced Single Page Application. A view engine based on knockout.js and powered with Razor Views, advanced tools for client server synchronization, and a powerful validation framework. The SPA View engine handles automatically virtual pages and virtual links. Virtual pages may be connected to the browser history, so the user may navigate among them with the back and forward browser buttons.
Virtual pages may be stored in a page store to keep their state so that when the user returns back to the same virtual page he finds it in exactly the same state he left it. This feature enhances the user experience and makes the SPA similar to a native windows application.
The SPA framework includes also an authorization framework that coordinates the virtual pages and views framework with the standard asp.net authorization system. If a user can't access a virtual page it is automatically redirect to the login virtual page. It is also quite easy to implement a menu that shows only the virtual pages that may be accessed by the current user.
Views are Data Moving Plug-in templates, in particular they may be Mvc partial views that contain not only html, but also complex Data Moving Plug-in controls such as Grids and TreeViews, and also third parties widgets. Views are grouped into deployment units called templates modules and are cached in order to reduce the round-trips to the server. Each time a view is required the View engine first search its template module in a modules cache, and then requires it to the server. Templates modules are returned by standard Mvc Controllers, either by inserting them in partial views or by using an ad hoc action results.
Views PlaceHolders are specified with the ClientTreeIteratorFor, RecurIterationOnSingle, and RecurIterationOn Html extensions (views are basically mvc Views). A view that is loaded in a placeholder may, in turn, contain other placehoders. Thus, in general, View loading is a recursive process that creates a tree of nested views from hierarchical data, where each view of the tree is bound to the corresponding data item in the parallel data hierarchy. The ClientTreeIteratorFor helper defines the root of the tree, RecurIterationOnSingle bind a placeholder to a single data item, and RecurIterationOn bind a several views placeholder to an IEnumerable.
The whole private are of this web site has been implemnted with the Data Moving Plug-in SPA Framework. See a demo video here.