martes, 30 de octubre de 2012

Routers en ASP.NET MVC 3

1 comentario:
ASP.NET MVC proporciona una nueva forma de crear aplicaciones web que es más extensible y comprobable. 

En este documento vamos a tener una mirada más profunda en los dos pilares de ASP.NET MVC - Routers y controladores.


Routers

Uno de los objetivos principales de ASP.NET MVC es la optimización del Search Engine (SEO). Ya que los motores de búsqueda funcionan principalmente mediante direcciones URL. Por lo que una definición de una URL significativa y comprensible es muy importante para que nuestra aplicación sea más amigable para los buscadores.


Los Routers es la manera de construir URLs significativo para una solicitud web. Como ya hemos visto, nuestras direcciones URL de aplicaciones MVC no están representados por extensiones como. Aspx. En cambio, las direcciones URL consisten en el nombre del controlador y el nombre de la acción.



Primero vamos a entender cómo funciona el enrutamiento por defecto. Abra el archivo Global.ascx, y podemos ver los métodos  Application_Start () y RegisterRoute ().



public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 
    routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
            // Parameter defaults
    );
}



Mire el estado donde traza la ruta. Su URL utiliza el esquema:
 "{controller} / {action} / {id}", donde id es un parámetro opcional.

New {controller = "Home", action = "Index", id = UrlParameter.Optional}

Especifica que, en caso de que la URL no especifica un controlador, utilice el controlador "home". Además, en ausencia de una acción, se usa la acción "Index", y el último parámetro es opcional.


Routing data

Podemos acceder a los datos de enrutamiento dentro de un controlador utilizando el objeto RouteData.


  public ActionResult Index()
        {
            ViewBag.Message = string.Format("{0}---{1}--{2}",
        RouteData.Values["Controller"],
        RouteData.Values["action"],
        RouteData.Values["id"]
        );

            return View();
        }




Controllers


Ahora vamos a crear un nuevo controlador y ver cómo puede enrutar el nuevo controlador con un patrón de enrutamiento diferente.

Añadir un nuevo controlador con el nombre "Ejemplo" para esto, presione clic derecho sobre la carpeta "Controllers" y add new controler:






Ahora vamos agregar un controller llamado test, el codigo debe quedar de la siguiente manera:


 public class EjemploController : Controller
    {
        //
        // GET: /Ejemplo/

        public ActionResult Verificar()
        {
            return Content("Hola soy el controlador ejemplo");
        }

    }

El funcionamiento normal seria que pudieron entrar con el URL:




Si realizamos un pequeno cambio, de llamar ejemplo sin accion, nos mostrar un error 404 ya que lo intentara redireccionar a index.




Adding a new route

Para solventar el problema agregaremos un nuevo router en global.asax


        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                 "ejemplo",
                 "ejemplo/{action}",
                 new { controller = "ejemplo", action = "Verificar" }
                 );


            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );         

        }

El resultado seria:


Es posible que necesitemos enviar algunos datos a nuestro controlador desde la URL.

Asi que vamos  a cambiar nuestro Router y controller.


 routes.MapRoute(
                 "ejemplo",
                 "ejemplo/{usuario}",
                 new { controller = "ejemplo", action = "Verificar" }
                 );

 public ActionResult Verificar(string usuario)
        {
            return Content("Hola soy el controlador ejemplo: " + usuario);
        }

Vamos a probar, note que el controller y su parametro son llamados correctamente:





Sin embargo ahora y no funciona el llamado sin parametro.






Para resolver este problema, debemos cambiar el Router y especificar el parámetro opcional.



 routes.MapRoute(
                 "ejemplo",
                 "ejemplo/{usuario}",
                 new { controller = "ejemplo", action = "Verificar", usuario = UrlParameter.Optional }
                 );

El resultado sera:






Bueno con esto termino mi ejemplo principal.

Por ultimo les quiero comentar que los Router tambien pueden servir para hacer alias de de nuestras rutas:

Ejemplo el controller: Home y su metodo: About se utiliza de la siguiente forma:




Podemos agregar al Router para que podemos llamarlo por otro nombre:


  routes.MapRoute(
               "test", // Route name
               "About2/{action}", // URL with parameters
               new { controller = "Home", action = "About" } // Parameter defaults
           );

Resultado:

Bueno espero que les sirva.
Ver

lunes, 29 de octubre de 2012

Dynamic v. Strongly Typed Views MVC

No hay comentarios.:
Hay tres formas de pasar información de un controlador a una vista en ASP.NET MVC 3:


1.) Strongly typed model object.
2.) Dynamic type (using @model dynamic)
3.) Using the ViewBag

Vamos a crear y llenar una simple lista blogs para nuestro ejemplo.

Primer paso vamos agregar el siguiente código el controller home.


using System.Collections.Generic;
using System.Web.Mvc;

namespace Mvc3ViewDemo.Controllers {

    public class Blog {
        public string Name;
        public string URL;
    }

    public class HomeController : Controller {

        List<Blog> topBlogs = new List<Blog>
      { 
          new Blog { Name = "ScottGu", URL = "http://weblogs.asp.net/scottgu/"},
          new Blog { Name = "Scott Hanselman", URL = "http://www.hanselman.com/blog/"},
          new Blog { Name = "Jon Galloway", URL = "http://www.asp.net/mvc"}
      };

        public ActionResult IndexNotStonglyTyped() {
            return View(topBlogs);
        }

        public ActionResult About() {
            ViewBag.Message = "Welcome to ASP.NET MVC!";
            return View();
        }
    }
}

Vamos añadir un View Razor con el nombre 
IndexNotStonglyTyped() , para eso presionamos clic derecho sobre el metodo y luego add view.



Abrimos la vista IndexNotStonglyTyped y agregamos el siguiente Ejemplo:


@model dynamic
@{
    ViewBag.Title = "IndexNotStonglyTyped";
}

<h2>IndexNotStonglyTyped</h2>

<p>
    <ul>
        @foreach (var blog in Model)
        {
            <li>
                <a href="@blog.URL">@blog.Name</a>
            </li>   
        }
    </ul>
</p>

El resultado sera:






Ahora realizaremos el ejemplo de strongly typed.



Vamos agregar el siguiente otro metodo al controller home.


public ActionResult StonglyTypedIndex() {
    return View(topBlogs);
}

Vamos añadir un View Razor con el nombre StonglyTypedIndex() , para eso presionamos clic derecho sobre el metodo y luego add view.



Abrimos la vista StonglyTypedIndex y agregamos el siguiente Ejemplo:


@model IEnumerable<Mvc3ViewDemo.Controllers.Blog>

@{
    ViewBag.Title = "StonglyTypedIndex";
}

<h2>StonglyTypedIndex</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
           <a href="@item.URL">@item.Name</a>          
        </td>
    </tr>
}

</table>

El resultado sera:




Ver

miércoles, 24 de octubre de 2012

Backup y Restore mysql

No hay comentarios.:
Para crear una copia de seguridad se debe utilizar un simple comando mysqldump.

Sintaxis:

mysqldump -u [username] -p [password] [databasename] > [dump.sql]

[nombre de usuario] - Nombre de usuario de base de datos
[contraseña] - Contraseña de la base de datos
[DatabaseName] - Nombre de su base de datos
[dump.sql] - Archivo escribira la copa de seguridad.

Backup Full database

mysqldump -u root -p123 Northwind > northwind.sql


Restore

mysql -u root -p123 Northwind < northwind.sql


Espero les sirva.
Ver

sábado, 6 de octubre de 2012

PDO PHP ejemplos con clasess

No hay comentarios.:
PHP Data Objects (PDO) nos proporciona una capa de accedo a Datos, utilizando las mismas funciones para diferentes bases de datos.

Lo primero es hacer la clase de conexión.
<?php 

class Database 
{ 
    public $db;   // handle of the db connexion    
    private static $dns = "mysql:host=localhost;dbname=northwind"; 
    private static $user = "user"; 
    private static $pass = "password";     
    private static $instance;

    public function __construct ()  
    {        
       $this->db = new PDO(self::$dns,self::$user,self::$pass);       
    } 

    public static function getInstance()
    { 
        if(!isset(self::$instance)) 
        { 
            $object= __CLASS__; 
            self::$instance=new $object; 
        } 
        return self::$instance; 
    }    
} 

?> 


Ahora vamos hacer unos ejemplos de Select / insert
<?php 
require_once "database.php"; 
class Cproducts  
{ 
public function validar($codigo) 
    { 
        $cc = Database::getInstance(); 
        $sql = "SELECT count(*) FROM products WHERE categoryid=:codigo ";        
        $result = $cc->db->prepare($sql); 
        $params = array("codigo" => $codigo); 
        $result->execute($params); 
        $affected_rows = $result->fetchColumn(); 
        return ($affected_rows); 
        //retorna numerico 
    } 

 public function Datos($codigo) 
    { 
        $cc = Database::getInstance(); 
        $sql="SELECT * from products where categoryid=:codigo"; 
        $result = $cc->db->prepare($sql);     
        $params = array("codigo" => $codigo); 
        $result->execute($params); 
        return ($result); 
        //retorna conjunto de datos 
    } 

    public function NuevoCategoria($nombre,$descripcion) 
    {         
        $cc = Database::getInstance(); 
        $sql = "Insert into categories(nombre,descripcion)"; 
        $sql .= " values( "; 
        $sql .=" :nombre,:description)"; 
        $result = $cc->db->prepare($sql); 
        $params = array("nombre" =>$nombre, "descripcion" => $descripcion); 
        $result->execute($params);     
    } 

} 
?>



Por ultimo los como usar estas clases
<?php     

    require_once("class/Cproducts.php"); 

        $aproducts = new Cproducts;     
        $affected_rows=$aproducts->validar($codigo); 

       $result=$aproducts->Datos($codigo); 
       foreach($result as $row)  
       { 
               echo($row['productname']); 
       } 

?>




Espero les sirva.
Ver