Manejo de rutas en sitios web Dinámicos con ASP.NET

18 12 2008

Hola, siguiendo con el anterior ejemplo, podemos cambiar la ruta de nuestras páginas web mediante acciones.

Veamos el global.asax completo, antes de iniciar con las modificaciones.

<%@ Application Language="C#" %>
<%@ Import Namespace="System.Web.Routing" %>
<%@ Import Namespace="System.Web.DynamicData" %>

<script RunAt="server">
    public static void RegisterRoutes(RouteCollection routes) {
        MetaModel model = new MetaModel();

        //                    IMPORTANT: DATA MODEL REGISTRATION 
        // Uncomment this line to register LINQ to SQL classes or an ADO.NET Entity Data
        // model for ASP.NET Dynamic Data. Set ScaffoldAllTables = true only if you are sure 
        // that you want all tables in the data model to support a scaffold (i.e. templates) 
        // view. To control scaffolding for individual tables, create a partial class for 
        // the table and apply the [Scaffold(true)] attribute to the partial class.
        // Note: Make sure that you change "YourDataContextType" to the name of the data context
        // class in your application.
        //model.RegisterContext(typeof(YourDataContextType), new ContextConfiguration() { ScaffoldAllTables = false });

        // The following statement supports separate-page mode, where the List, Detail, Insert, and 
        // Update tasks are performed by using separate pages. To enable this mode, uncomment the following 
        // route definition, and comment out the route definitions in the combined-page mode section that follows.
        routes.Add(new DynamicDataRoute("{table}/{action}.aspx") {
            Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }),
            Model = model
        });

        // The following statements support combined-page mode, where the List, Detail, Insert, and
        // Update tasks are performed by using the same page. To enable this mode, uncomment the
        // following routes and comment out the route definition in the separate-page mode section above.
        //routes.Add(new DynamicDataRoute("{table}/ListDetails.aspx") {
        //    Action = PageAction.List,
        //    ViewName = "ListDetails",
        //    Model = model
        //});

        //routes.Add(new DynamicDataRoute("{table}/ListDetails.aspx") {
        //    Action = PageAction.Details,
        //    ViewName = "ListDetails",
        //    Model = model
        //});
    }

    void Application_Start(object sender, EventArgs e) {
        RegisterRoutes(RouteTable.Routes);
    }

</script>
Como lo hemos hecho al principio hemos colocado nuestro contexto de datos.
model.RegisterContext(typeof(myDataContextDataContext),
          new ContextConfiguration() { ScaffoldAllTables = true });
Si checamos bien tenemos dentro de la carpeta de DynamicData, tenemos las plantillas, como puedes ver en la imagen.
 
routingwithDynamicDataWebSite01
Estas plantillas, nos van a servir y las vamos a tomar como acciones, dentro de nuestra base de datos dependiendo de la tabla que eligamos al principio.
 
Por ejemplo vamos a quitar el comentario de la parte de Routes (rutas), y en esta parte estamos indicando de que cuando presionemos que queramos ver la lista (List) de elementos según la tabla, nos redireccione a la plantilla ListDetails, o cualquiera que nosotros personalizemos.
routes.Add(new DynamicDataRoute("{table}/ListDetails.aspx") {
         Action = PageAction.List,
         ViewName = "ListDetails",
        Model = model
     });
Y si quitamos los siguientes comentarios, tendremos
Este código indica que si queremos ver los detalles de los elementos de la tabla escogida, entonces nos redireccione igual a la plantilla ListDetails.
routes.Add(new DynamicDataRoute("{table}/ListDetails.aspx")
           {
           Action = PageAction.Details,
           ViewName = "ListDetails",
           Model = model
       });

Código completo:

<%@ Application Language="C#" %>
<%@ Import Namespace="System.Web.Routing" %>
<%@ Import Namespace="System.Web.DynamicData" %>

<script RunAt="server">
    public static void RegisterRoutes(RouteCollection routes) {
        MetaModel model = new MetaModel();

        model.RegisterContext(typeof(myDataContextDataContext),
            new ContextConfiguration() { ScaffoldAllTables = true });

            routes.Add(new DynamicDataRoute("{table}/ListDetails.aspx") {
            Action = PageAction.List,
            ViewName = "ListDetails",
           Model = model
        });

            routes.Add(new DynamicDataRoute("{table}/ListDetails.aspx")
            {
            Action = PageAction.Details,
            ViewName = "ListDetails",
            Model = model
        });
    }

    void Application_Start(object sender, EventArgs e) {
        RegisterRoutes(RouteTable.Routes);
    }

</script>
Vemos en pantalla:
routingwithDynamicDataWebSite

La gran ventaja de esto, es que el ejemplo anterior ocupabamos una página o plantilla para editar, para lista, para agregar elementos y en esta plantilla ListDetails, podemos hacerlo todo junto y la ruta  no va a cambiar.

routingwithDynamicDataWebSite02

Saludos.





Dynamic Data Web Site

18 12 2008

Este ejemplo es muy sencillo, pero realmente útil.

1.- Creamos una página web utilizando la plantilla de Dynamic Data Web Site.

2.- Agregamos un archivo de base de datos SQL Server.

DynamicWebSiteSample02

3.-Creamos nuestras tablas.

4.- Agregamos un archivo de tipo LINQ To SQL Classes

DynamicWebSiteSample03

Agregamos nuestra tabla o tablas al diseñador.

DynamicWebSiteSample04

5.- Nos vamos a Global.asax

DynamicWebSiteSample05

6.- En este archivo, vamos a quitar el comentario y colocar nuestro contexto de datos, de acuerdo a como hemos llamado anteriormente.

model.RegisterContext(typeof(myDataContextDataContext),
 new ContextConfiguration() { ScaffoldAllTables = true});

Código completo:

<%@ Application Language="C#" %>
<%@ Import Namespace="System.Web.Routing" %>
<%@ Import Namespace="System.Web.DynamicData" %>

<script RunAt="server">
    public static void RegisterRoutes(RouteCollection routes) {
        MetaModel model = new MetaModel();

        model.RegisterContext(typeof(myDataContextDataContext),
            new ContextConfiguration() { ScaffoldAllTables = true });
        routes.Add(new DynamicDataRoute("{table}/{action}.aspx") {
            Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }),
            Model = model
        });
    }

    void Application_Start(object sender, EventArgs e) {
        RegisterRoutes(RouteTable.Routes);
    }

</script>
Vemos ejecutando la aplicación….
 
DynamicWebSiteSample06
Vamos a agregar un elemento.
 
DynamicWebSiteSample07
 
DynamicWebSiteSample08
 
Saludos…
 




Como trabajar con AJAX ControlToolkit 3.5

8 10 2008

Bien primero que nada vamos a la sección del proyecto en CODEPLEX, recuerden que este sitio web, es implementado por Microsoft para apoyar al Open Source, y en donde la comunidad de desarrolladores puede compartir sus codigos de proyectos.

URL: http://www.codeplex.com/AjaxControlToolkit

Descargamos la versión 3.5 sp1 para visual studio 2008.

Descomprimimos el zip y nos vamos a la carpeta de AjaxControlExtender, damos doble clic AjaxControlExtender.vsi e instalamos las plantillas.

ajaxControlToolkitsp1_01

Iniciamos en Visual Studio 2008, abrimos el proyecto de AJAXControlToolkit de la carpeta que descomprimimos,  buscamos TemplateVSI, y damos build al proyecto y de ahi nos genera dos archivos una dll y un archivo de propiedades .pdb.

Esos archivos los copiamos y los tenemos presente para a continuación:

Creamos un nuevo sitio web.

ajaxControlToolkitsp1_02 

Escogemos un pestaña de la barra de herramientas le colocamos el nombre que querramos.Y damos clic derecho agregamos componentes o “choose items”.

ajaxControlToolkitsp1_03

Escogemos el dll que copiamos. y damos aceptar.

ajaxControlToolkitsp1_05

Tenemos la lista de los controles que acabamos de anexar al ToolBox.

Ahora vamos a hacer un demo.

Seleccionamos un ScriptManager, recuerden que si vamos a trabajar con AJAX, necesitamos forsozamente este control antes de todos.

ajaxControlToolkitsp1_06

Si coloco un botón, y despues me voy a mi barra de herramientas donde tengo los controles de AJAX, puedo seleccionar y arrastrar el ConfirmButtonExtender, sobre el Boton agregado.

ajaxControlToolkitsp1_07

Automaticamente aparece del siguiente modo, y en la ventana de propiedades del botón se anexa lo siguiente:

ajaxControlToolkitsp1_08

Supongamos que deseamos utilizar la propiedad de ConfirmText para mandarle un mensaje al usuario de la pagina.

ajaxControlToolkitsp1_09

Y vemos nuestra pagina en el explorador web.

ajaxControlToolkit10

¿Quieres mas referencias?

Checate estos links que te coloco.

URL:http://www.asp.net/ajax/ajaxcontroltoolkit/samples/

Videos: http://www.asp.net/ajax/ajaxcontroltoolkit/

Documentación: http://www.asp.net/ajax/documentation/

ScottBlog: http://weblogs.asp.net/scottgu/ 

Saludos.





Nuevos tutoriales de AJAX ControlToolkit

6 06 2008

logoaspnetcotrolttollkit Les pego la liga de los nuevos tutoriales de Ajax ControlToolkit, están muy padres.

URL: http://www.asp.net/learn/ajax-control-toolkit/





Ya llegó, ya esta aquí el Training Kit del .NET 3.5 {Abril}

16 04 2008

Este training kit contiene 6 hands on labs:

  • ADO.NET Data Services
  • ADO.NET Entity Framework
  • ASP.NET AJAX History
  • ASP.NET Dynamic Data
  • ASP.NET MVC
  • ASP.NET Silverlight controls

URL: http://www.microsoft.com/downloads/details.aspx?FamilyID=355c80e9-fde0-4812-98b5-8a03f5874e96&displaylang=en





Microsoft Technet & MSDN Briefing Agenda

16 04 2008

Múltiples Sesiones On Demand y Sesiones en Vivo
-Ask To The Experts-  para tus consultas
.

-MSDN-

  • Key note
    Bienvenida con breve introducción y paseo de la nuevas funcionalidades técnicas de Windows Server 2008, Visual Studio 2008 y SQL Server 2008.
  • Creando la siguiente generación de aplicaciones Web con mayor productividad.
    En esta sesión presentaremos el Diseñador HTML & CSS, AJAX, JS Debugging & Intellisense.
  • Herramientas para asegurar la calidad utilizando Visual Studio Team System.
    Métricas de código, cobertura de código, Testing en VS2008 e Integración de código.
  • Aplicaciones con interfaces familiares bajo Microsoft Office System.
    Ribbons Designer, Custom Task Pane, Outlook Form Regions, Workflows en SharePoint.
  • Clientes ricos ocasionalmente conectados.
    Desarrollo con WPF. Synchronization Services.
  • Sesión en Línea : Ask to the Development Experts 1
    Oradores y especialistas en temas de desarrollo en sesión de Live Meeting contestando tus preguntas.
  • Accediendo a múltiples fuentes de datos con LINQ.
    Características de LINQ, combinando datos de diferentes fuentes.
  • Silverlight 2:  Iluminando la Web.
    VS 2008, nuevas características en Silverlight 2.
  • Conectando al mundo con .NET Framework 3.5: WCF + WF para mejores resultados.
    Syndication Services e integración WCF+WF.
  • Extendiendo Visual Studio 2008.
    Demostraciones de extensiones de Visual Studio. Resumen de ecosistema: Shell & GAT/GAX.
  • Sesión en Línea : Ask to the Development Experts 2 Multiples Expertos
    Oradores y especialistas en desarrollo en sesión de Live Meeting contestando tus preguntas.

 

-TECHNET

Key note
Bienvenida con breve introducción y paseo de la nuevas funcionalidades técnicas de Windows Server 2008, Visual Studio 2008 y SQL Server 2008.

  • Windows Server Core
    Introducción a Windows Server 2008.
  • Windows Server Virtualización
    Administrando la infraestructura de TI; virtualización de la plataforma para nivelar
    las inversiones.
  • Windows Server Seguridad
    Evitando que la información se filtre; seguridad en la plataforma para trabajar con confianza.
  • Windows Server Web
    Respondiendo a nuevas demandas en mi plataforma Web; optimización de la plataforma Internet para crecer.
  • Windows Server 2008/Vista
    Windows Server y Vista. La mejor combinación.
  • SQL track 1
    Administración en SQL 2008.
  • SQL track 2
    Aplicaciones de Misión Crítica sobre SQL 2008.





Tutorial 12: Manipular los estados del gamePad y del Teclado en XNA

20 03 2008

Un simple juego que nos dará el número de veces que fue presionado el botón de dicho jugador, declaramos nuestra variable contador:

int contador;

Primero lo que debemos hacer es que al iniciar el juego mi contador este en 0, de tal forma puedo iniciar el conteo, entonces vamos al método Update:

protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();

            GamePadState control1 = GamePad.GetState(PlayerIndex.One);
            if (control1.Buttons.Start == ButtonState.Pressed)
            {
                contador = 0;
            }
            base.Update(gameTime);
        }

Ahora agregamos un spriteFont a nuestro proyecto ya sabemos declarar y cargar nuestro spriteFont, cualquier duda checa los tutoriales pasados…, y nos vamos al método Draw:

protected override void Draw(GameTime gameTime)
        {
            graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
            string contadorCadena = contador.ToString();
            Vector2 posicionContador = new Vector2(50, 400);
            spriteBatch.Begin();
            spriteBatch.DrawString(texto, contadorCadena, posicionContador, Color.White);
            spriteBatch.End();
            base.Draw(gameTime);
        }

En este método declaro una variable de tipo cadena para almacenar el valor del contador, además de un vector de posición y lo dibujo en pantalla. hasta ahí todo normal ahora, le pondremos la acción en el método Update de incremento:

protected override void Update(GameTime gameTime)
       {
           if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
               this.Exit();

           GamePadState control1 = GamePad.GetState(PlayerIndex.One);
           KeyboardState teclado=Keyboard.GetState();
           if (control1.Buttons.Start == ButtonState.Pressed)
           {
               contador = 0;
           }

           if (control1.Buttons.B == ButtonState.Pressed || teclado.IsKeyDown(Keys.B))
           {
               contador++;
           }
           base.Update(gameTime);
       }

tutorial12_01

Si ejecutamos esto, a la hora de presionar incrementará enormemente, y si dejamos presionado incrementa, y el chiste aquí es contar cada que oprimimos el botón, para arreglar esto, tenemos que agregar una condición mas y quedar de esta manera:

GamePadState control0;
KeyboardState teclado0;

       protected override void Update(GameTime gameTime)
       {
           if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
               this.Exit();

           GamePadState control1 = GamePad.GetState(PlayerIndex.One);
           KeyboardState teclado=Keyboard.GetState();
           if (control1.Buttons.Start == ButtonState.Pressed)
           {
               contador = 0;
               control0 = control1;
           }

          if ((control0.Buttons.B == ButtonState.Released && control1.Buttons.B==ButtonState.Pressed)|| (teclado0.IsKeyUp(Keys.B) && teclado.IsKeyDown(Keys.B)))
           {
               contador++;
           }
           teclado0 = teclado;
           control0 = control1;
           base.Update(gameTime);
       }

Download: Xbox360Game4.zip





Conferencias de Visual Studio 2008 y Desarrollo Web

11 03 2008

Primera Conferencia

viernes, 14 de marzo de 2008 10:30 a.m. – viernes, 14 de marzo de 2008 12:30 p.m. Ciudad de México
Hora de recepción: 10:30 a.m.

CBTIS 213, Autopista a Villahermosa S/N, Colonia Ejido Tacoteno
Minatitlan Veracruz Mexico
Idiomas:  Español. 
Productos:  ASP.NET, Microsoft Expression Web, Microsoft Silverlight y Visual Studio. 
Público:  Education y Estudiante. 
 

Información general del evento
En esta conferencia se enfocara sobre tecnologìas como:

Visual Studio 2008
Expression Web 2
Silverlight 2 Beta 1
ASPNET 3.5

Speakers:
MSP Edison Daniel García Chiñas
MSP Benito Cruz Tuyub

Opciones de registro Id. de evento:
1032373380 

URL Registro: http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032373380&Culture=es-MX

Read the rest of this entry »