sábado, 24 de noviembre de 2012

Datepicker con MVC 4 (Razor)

No hay comentarios.:
El ejemplo final será:



El ejemplo aplicara a todos los tipos de datos de fecha: Ejemplo


[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }


Pero en este ejemplo no utilizaremos ya que lo realizaremos con Entity Framework.

1.) Crear el proyecto, File - New Proyect - ASP.NET MVC Web Applicaction




2.)Le mostrara la pantalla de que tipo de aplicación (Internet o intranet), que tipo de motor quiere utilizar ASPX o Razor. Seleccione Internet Application y Use HTML 5 semantic Markup.



3.) En el Solucion explorer, presione clic derecho sobre la carpeta Models, nuevo elemento y luego en la ventana seleccione Ado Entity Data Model, con el nombre: NorthwindModel.edmx

Seleccione las tablas: Orders, Customers, Employees












Antes de continuar compile el proyecto.

4.) Presione Clic derecho sobre la carpeta de Controllers, luego add y por ultimo Controller....






Nombre: PedidosController
Template: Adding a controller with read/write actions and views, using Entity Framework 
Model Data Class: Orders (Nombre proyecto.Models)
Data Context class: NortwindEntities (Nombre proyecto.Models)
Views: Razor (cshtml)

5.) Agregando templates: 
5.1) Cree las siguientes carpetas,  View , shared 
DisplayTemplates
EditorTemplates


5.2) Cree el archivo display en la carpeta DisplayTemplates con el nombre DateTime


Agregue el siguiente código:

@model Nullable<DateTime> 
@(Model != null ? string.Format("{0:d}", Model) : string.Empty)

5.3) Cree el archivo Editor en la carpeta EditorTemplates con el nombre DateTime (ver paso 5.2)

Agregue el siguiente código:

@model Nullable<DateTime> 

 @{ 
    DateTime dt = DateTime.Now; 
    if (Model != null) 
    { 
       dt  = (System.DateTime) Model; 
    
    } 
    @Html.TextBox("", String.Format("{0:d}", dt.ToShortDateString()), 
     new { @class = "datefield", type = "string"  }) 
} 

*En MVC usamos:  type = "datestring"    Pero aquí le pondremos "string" para evitar que se confunda con html5 y no salgan los 2 calendarios.

6.) Agregue el archivo DatePickerReady.js en la carpeta Script


$(function () {
    $(".datefield").datepicker();
});


8.) Agreguelas referencias a los jquery, en el archivo layout.cshtml localizada en view, share.


     @Styles.Render("~/Content/css") 

        @Styles.Render("~/Content/themes/base/jquery.ui.core.css") 
        @Styles.Render("~/Content/themes/base/jquery.ui.datepicker.css") 
        @Styles.Render("~/Content/themes/base/jquery.ui.theme.css") 
          



        @Scripts.Render("~/bundles/modernizr") 
        @Scripts.Render("~/bundles/jquery") 
        @Scripts.Render("~/bundles/jqueryui") 
        @Scripts.Render("~/Scripts/DatePickerReady.js") 
         
        @RenderSection("scripts", required: false)


Comente las siguientes lineas que están al final del layout.cshtml

@*@Scripts.Render("~/bundles/jquery") 
        @RenderSection("scripts", required: false)*@

Si quieren que el picker este en español tienen que descargar de http://jqueryui.com/ las librerías de jquery y luego agregar el layourt.cshtml


        @Scripts.Render("~/Scripts/jquery.ui.datepicker-es.js") 
        

Luego cambiar la función DatePickerReady.js por:


$(function () {
    $(".datefield").datepicker($.datepicker.regional[ "es" ] );
});


Para cambiar los colores de su control ingrese a:
http://jqueryui.com/



Ver

viernes, 2 de noviembre de 2012

Seguridad con MVC 4 (Membership)

4 comentarios:
Guia Rapida de Membership en MVC4.

En MVC 4 es muy fácil utilizar esta herramienta, siga los siguientes pasos para ver un ejemplo practico.

1.) Cree un nuevo proyecto, 
        File --> New proyect
        Archivo - Nuevo Proyecto





2.)Luego seleccione la plantilla "internet aplication" o "Aplicación de Internet"





3.) Abra su archivo web config y configure correctamente la información de su connection String para "DefaultConnection"





El web config debe quedar de la siguiente manera, recuerde que debe configurar acorde a su equipo.

  <connectionStrings> 
    <add name="DefaultConnection" connectionString="Data Source=localhost; 
            Initial Catalog=northwind;user id=sa;password=P@ssw0rd" providerName="System.Data.SqlClient" /> 
  </connectionStrings>

Vamos a ver una imagen de la base de datos antes de crear nuestro primer usuario.




4.) Ahora vamos a crear nuestro primer usuario, para esto debemos ejecutar nuestro proyecto.




Creer 2 usuarios, administrador y user1, esto nos será de utilidad para los próximos pasos.

Si todo esta correcto debería haber creado las tablas:


UserProfile    --  Listado de usuarios
webpages_Membership  -- Contraseñas y reglas de seguridad
webpages_OAuthMembership - Almacena información acerca de los inicios de sesión de terceros, almacenará el nombre del proveedor (digamos Facebook) la identificación del proveedor y la identificación de usuario. El ID de usuario es normalmente un símbolo para identificar a cada usuario.
webpages_Roles    - Roles
webpages_UsersInRoles   -- Usuarios por roles.




5.) Agregando Roles, Para agregar roles en muy facil solo hacemos un insert en la tabla webpages_Roles.

INSERT INTO [dbo].[webpages_Roles]
                     ([RoleName])
         VALUES
                     ('administradores')
        

6.) Ahora vamos agregar usuario "administrador" a nuestro rol "Administradores", Pero primero debemos saber que id tiene nuestro usuario, para esto ejecutamos:




Ahora ejecutamos:

INSERT INTO [dbo].[webpages_UsersInRoles]
                     ([UserId]
                     ,[RoleId])
         VALUES
                     (1
                     ,1)

5.) En MVC la seguridad se agrega en los controles, por cada acción, vamos hacer un ejemplo, en la carpeta controller habrá HomeController y pruebe con las siguientes posibilidades.


 [Authorize] 
        public ActionResult About() 
        { 
            return View(); 
        } 

[Authorize(Roles = "administradores")] 
        public ActionResult About() 
        { 
            return View(); 
        } 

[Authorize(Users="user1")] 
        public ActionResult About() 
        { 
            return View(); 
        }

Authorize: Permitira todos los usuarios ya autenticados.
Authorize Roles: Solo los roles autorizados en este ejemplo: Administradores
Authorize Users: Solo los usuarios autorizados en este ejemplo: User1


Ver

jueves, 1 de noviembre de 2012

Manejo de errores personalizados MVC 3

No hay comentarios.:
Guia rapida para manejo de errores personalizados en MVC 3.


Paso 1.) Global Filters

Asegurase que en su archivo Global.asax tiene lo siguiente.

 public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
            
        }

Paso 2.) Error Views


Abra su archivo Error.cshtm que debe estar en View/Shared 
Agregaremos este código despliega  información mas detallada.


@model System.Web.Mvc.HandleErrorInfo

@{
    ViewBag.Title = "Error";
}

<h2>
     Opps: Un error ha ocurrido.
</h2>
<p>Controller = @Model.ControllerName</p>
<p>Action = @Model.ActionName</p>
<p>Message = @Model.Exception.Message</p>
<p>StackTrace :</p>
<pre>@Model.Exception.StackTrace</pre>


Paso 3.) Abra su web config y agregue el siguiente codigo .




<system.web>
  <customErrors mode="On" defaultRedirect="~/error">
    <error statusCode="404" redirect="~/error/notfound"></error>
  </customErrors&gt

Pruebas.

Abra su controlador home, busque la acción "About' y agregue el siguiente código, el cual forzara un error:


   public ActionResult About()
        {
            throw new Exception("This is not good. Something bad happened.");
            return View();
        }





Ver

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

lunes, 17 de septiembre de 2012

Listar nombre de tablas SqlServer , Oracle

No hay comentarios.:
Listado de tablas con su Schema - SQL Server.

select b.name Esquema, a.name NombreTabla
from sys.tables a,sys.schemas b
where a.schema_id = b.schema_id
and type_desc='USER_TABLE'
order by b.name,a.name;

Listado de Store Procedure su Schema - SQL Server

select b.name Esquema, a.name NombreObjeto
from sys.procedures a, sys.schemas b
where a.schema_id = b.schema_id
order by b.name,a.name;


Listado de tanlas su Schema - Oracle

select owner Esquema,object_name NombreTabla 
from DBA_OBJECTS
where  object_type='TABLE'
order by owner,object_name;
Listado de Store Procedure su Schema - Oracle Server
SELECT owner Esquema,OBJECT_NAME NombreObjeto
FROM ALL_OBJECTS
WHERE  OBJECT_TYPE='PROCEDURE'
ORDER BY OBJECT_NAME;
Ver

viernes, 17 de agosto de 2012

Ejemplo de Entity Framework con mysql

No hay comentarios.:
En este ejemplo vamos a trabar con mysql. 

Configurar el proyecto


1.) Vamos hacer un nuevo, Abra Visual Studio .Net - New web site



2.) Seleccione "ASP.NET Empty Web Site" y luego OK.

Configurar el Entity Framework

Ahora vamos agregar nuestro modelo.

3.) Agregando un modelo a nuestro sitio, ahora en "Solicion explorer"  Clic derecho sobre nuestro site y seleccione new item.



4.) En la ventana de new item seleccione "ADO .NET Entity Data Model"


5.) En asisten de Entity Data Model nos preguntara donde extraeremos el contenido, seleccione "Generate from database"




6.) El siguiente paso del asistente debe seleccionar la base de datos, si no apareciera tendra que precionar el boton de "New Connection" y configurar su mysql, no olvide seleccionar "Yes, include the sensitive data in the connection string"






Nota:
Por seguridad en ambientes de producción no realice la conexión con root.

7.) En el siguiente paso tenemos que seleccionar los objectos de la base de atos que utilizaremos, en este caso seran las tablas de "country" y "City"



8.) Nuestro modelo debe quedar de la siguiente manera:



Accediendo al mysql

Ahora que hemos configurado nuestro proyecto, mostraremos la información en un gridview.

1.) En el "solucion explorer" clic derecho sobre nuestro proyecto, y seleccione "New item"



2.) En la ventana de new item seleccione "Web form"



3.) Ahora agregue un gridview hacia el html, para esto debe de buscar en el "toolbox" en la seccion de "data" un "GridView".


Si no aparece "toolbox" por favor presione clic en el menu "View" y luego "Toolbox" o presione ctl + w,x

3.1) Ahora arrastre el Gridview hacia el html, entre los tag: "div"


Debe quedar de la siguiente manera.


4.) Ahora vamos agregar código, para esto presione clic derecho y seleccione "view code"



5.) Agregue el siguiente codigo



6.) Por ultimo presione F5,El resultado debería ser: 




Ver