ASP.NETJavaScriptMVC

SPA con Asp.Net Mvc & Angular

· por Marc Rubiño

Hace tiempo que quería escribir esta entrada pero la vida me ha dado otras prioridades desde que he vuelto a ser padre. Pero después de varias peticiones me gustaría explicar como combino una aplicación Asp.net Mvc con angular intentando aprovechar las ventajas de tener las vistas en el servidor.

El proyecto

Lo primero que he hecho es crear una solución con dos proyectos uno para la interfaz donde estará angular y otra para los servicios de datos, de esta manera queda más clara la separación de estas responsabilidades de la aplicación.

Proyecto

Views

Index

</pre>
<div id="main-content">
<div class="bodyPartialView" data-ng-view=""></div>
 <!– The SPA Views go here –></div>
<pre>

Scripts

App.js

demoApp = angular.module('demoApp', [])
    .config(['$routeProvider', function($routeProvider) {
        $routeProvider
            .when('/', {
                templateUrl: '/Concesionarios/List',
                controller: 'ListaCtrl'
            })
            .when('/detalle/:id', {
                templateUrl: '/Concesionarios/Detail',
                controller: 'DetalleCtrl'
            })
            .when('/edit/:id', {
                templateUrl: '/Concesionarios/Edit',
                controller: 'EditCtrl'
            })
            .otherwise({ redirectTo: '/' });
    }]);

El enrutamiento de angular es el encargado de configurar las url que se tienen que mapear para servir una vista y que controlador hay que cargar con la misma. Lo bueno de este enrutamiento que acepta tanto código inyectado HTML, como páginas. De esta manera podemos enrutar las vistas de la aplicación angular con las vistas de servidor de MVC.

Ventajas de utilizar las vistas de Servidor

Como he comentado anteriormente la ventaja de utilizar las vistas de servidor es que tenemos la posibilidad de utilizar sus recursos y el sistema de autorización de partes de la página evitando mostrar en cliente las partes privadas de nuestra aplicación, pero no os olvidéis siempre de hacer lo mismo con los servicios. Nadie tendría que acceder a nuestros servicios de datos sin los permisos adecuados.

1. Localización de las vistas en el servidor

Al tener enrutada las vistas desde cliente a las vistas de servidor podemos utilizar los recursos como cualquier otra aplicación ASP.NET MVC. Evitando tener que descargar todos los posibles recurso de todos los idiomas al cliente la primera vez.

</pre>
<h1>@Resources.Language.Title_List</h1>
<pre>

res

2.Autorización de la interfaz de usuario

Otra de las ventajas de utilizar las vistas de MVC es que podemos utilizar el sistema de seguridad que nos ofrece ASP.NET sin problemas. De esta manera solo se descargará la parte de HTML que el usuario tenga permisos y no hará falta administrar la seguridad de la interfaz desde el propio cliente.

Permitir editar solo a los usuarios autentificados:

</pre>
<div data-ng-repeat="coche in item.Coches"><a href="#/detalle/{{coche.IdCoche}}">{{ coche.Marca}}- {{coche.Modelo}}</a>
 @if (Request.IsAuthenticated)
 {
 <button class="btn btn-mini" data-ng-click="edit(coche.IdCoche)"><i class="icon-edit"></i></button>
 }</div>
<pre>

Lista si el usuario no está autentificado

list

Lista si el usuario está autentificado (Aparece el botón de editar)

list2

Conclusión

Bajo mi punto de vista los extremos siempre son malos, no deberíamos tener todo en el servidor ni todo en el cliente, hay que buscar el equilibrio que haga que nuestras aplicaciones puedan aprovechar lo mejor de cada entorno.

Podéis encontrar el ejemplo en : https://github.com/Marckys/AngulaR-ASP.NET-MVC