viernes, 19 de junio de 2015

Migrando Website a MVC

No hay comentarios.:




Migrar tu proyecto de web form a MCV es de vital importancia para que tu proyecto no se quede obsoleto, el problema es que los proyecto son muy grandes por lo que debes de dedicar muchas horas de migración, algo que no siempre es posible,  pues lo que puedes hacer es dejar ambos productos en un proyecto mvc con la idea de ir migrando poco a poco los web form, a continuación un ejemplo.








Web Forms - Website

Asumiendo que tienes un website con un aspx como el siguiente



Aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
        <h1>Ejemplo Migracion </h1> 
        <asp:Label ID="Label1" runat="server" Text="Ingrese un Numero:"></asp:Label> 
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
        <asp:Button runat="server" Text="Button" OnClick="Unnamed1_Click" /> 
        <br /> 
        <div id="resultados" runat="server"> 
        </div> 


    </form> 
</body> 
</html> 

Aspx.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class _Default : System.Web.UI.Page
{ 
    protected void Page_Load(object sender, EventArgs e)
    { 

    } 
    protected void Unnamed1_Click(object sender, EventArgs e)
    { 

        CalcClass cc = new CalcClass(); 
        decimal valor = Convert.ToDecimal(TextBox1.Text); 
        resultados.InnerHtml = cc.Calcular(valor).ToString(); 
    } 
}

Clase - CalcClass.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

/// <summary> 
/// Summary description for CalcClass 
/// </summary> 
public class CalcClass 
{ 
    public CalcClass() 
    { 

        // 
        // TODO: Add constructor logic here 
        // 
    } 
    public decimal Calcular(decimal valor)
    { 
        return valor * 2; 
    } 
}

Model View Controller - MVC 




Bueno ahora vamos a crear nuestro proyecto de mvc, donde alojaremos ambos proyectos.

1.) File --> New project



2.) Ahora seleccionamos el new ASP.NET Project, seleccionamos "Web Form", "MVC"



3.) Ahora vamos a traer  la clase,  para esto debemos de crear una carpeta llamada "Old_App_Code"

3.1) Clic derecho sobre el proyecto --> add --> New Folder


3.2) El nombre del folder debe ser "Old_App_Code"

3.3) Sobre el folder "Old_App_Code", clic derecho add--> Existen Item...



3.4) Buscamos la carpeta donde se aloja la clase "CalcClass.cs"



4.) Ahora abrimos la clase "CalcClass.cs" y le agregamos el namespace del nuestro proyecto, que en este caso es "ejemplo"

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

/// <summary> 
/// Summary description for CalcClass 
/// </summary> 
///  
namespace ejemplo 
{ 
    public class CalcClass 
    { 
        public CalcClass() 
        { 

            // 
            // TODO: Add constructor logic here 
            // 
        } 
        public decimal Calcular(decimal valor)
        { 
            return valor * 2;
        } 
    } 
}

5.)  Ahora vamos a agregar el web form,  clic derecho sobre el proyecto,  add--> Existen Item...






Ya tendremos el webform en el proyecto, sin embargo, aun no funciona tenemos que generar el "designer"


6.) Abre el archivo "Default.aspx", ahora clic en "Project" --> "Convert to Web Application"





6.1)  Se les mostrara, una advertencia, a lo cual diremos "Yes"



Esto cambiara varias cosas en el aspx, pueden ver en las siguientes lineas. La primera es el "web site" y la segunda el proyecto MVC.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

<%@ Page Language="C#" AutoEventWireup="true" Inherits="_Default" Codebehind="Default.aspx.cs" %>


Casi terminamos, aun no funciona correctamente ya que clase aun mostrara error.



8.) Por ultimo, debemos agregar un "using" en este caso "using ejemplo;"

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using ejemplo; 

public partial class _Default : System.Web.UI.Page
{ 
    protected void Page_Load(object sender, EventArgs e)
    { 

    } 
    protected void Unnamed1_Click(object sender, EventArgs e)
    { 

        CalcClass cc = new CalcClass(); 
        decimal valor = Convert.ToDecimal(TextBox1.Text); 
        resultados.InnerHtml = cc.Calcular(valor).ToString(); 
    } 
}

9.) Ahora tendremos ambos proyectos funcionando y podrás migrar poco a poco.





Espero que les guste. Gracias LAR por su ayuda.
Ver