none
trabajar con Sitios Web o Aplicaciones Web RRS feed

  • Pregunta

  • Buenas, desde ya hace unos dias he estado empezando a sumergirme en el desarrollo web y para ello cree una aplicacion web(Menu Nuevo Proyecto -> crear Aplicacion web asp.net). Bueno luego de terminar con algunos de mis avances decidi iniciar la copia de algunos de mis webforms y clases hacia el proyecto en el cual deberia de estar las versiones finales, pero me di cuenta de que este ultimo proyecto era en realidad uno que fue reado como Sitio Web.

    Mi pregunta es, cual es la diferencia y ventajas de trabajar de esas dos formas... lo que observe es que creando , por ejemplo, un webform en un proyecto de aplicacion web asp.net se crean 3 archivos, un [.aspx], un [.aspx.cs] y un [.aspx.designer.cs] , en cambio si creo uno en un proyecto creado como sitio web, solo se crean los dos primeros archivos mencionados.

    Mmm, y como puedo hacer para levantar mis webforms creados en mi proyecto de aplicacion web asp.net al proyecto creado como sitio web.


    Saludos... y una vez mas gracias jeje :)

    El hombre mas poderoso del mundo es aquel que es dueño de si mismo
    jueves, 19 de marzo de 2009 18:19

Respuestas

  • Visual Studio 2003, trabajaba con Web Applications.

    Visual Studio 2005, no existen Web Applications, ahora existen los Web Sites, que són más fáciles de portar. Cualquier carpeta puede ser un Sitio Web.

    Visual Studio 2005 SP1, debido a todo la gente de empresa tenía miedo migrar sus proyectos VS2003 a VS2005, por que simplemente no funcionaba nada, migrar un Web Application a Web Site. El SP1, traía nuevamente el Web Application, ahora todos los proyectos con VS2003 se pueden migrar sin problemas a VS2005.

    Visual Studio 2008, muchos proyectos de comunidad (por lo fácil de portar) se crearon usando Web Site, y sigue vigente. Web application también sigue vigente.

    La recomendación es: Si vas liberar un proyecto de ejemplo o para la comunidad, usa Web Site (por lo portabilidad), si vas hacer un desarrollo empresarial usa Web Application (por una mejor compilación y más controlada). Esta no es la recomendación oficial, si no una personal.

    Leer un poco más, siendo sinceros mucho más: Inline, beside, behind, Web Site Project, Web Application Project, y bla bla bla...

    Saludos,
    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    • Marcado como respuesta FAFNER viernes, 20 de marzo de 2009 0:20
    jueves, 19 de marzo de 2009 22:42
  • Si, también esta disponible la opción Publish Web, en los Web Application.

    En cuanto asp:Table y el GridView, es con el Table tienes que hacer un foreach (más código) para mostrar información. El table, no tiene columnas personalizadas (HyperLinkField). Lo único bueno que tendría el asp:Table, es personalización, pero para eso usas un Repeater. A simple vista no le veo ninguna ventaja al asp:table, más que decir que tu escribes más código.

    Con un gridView y un ObjectDataSource sólo haces lo siguiente

      <asp:GridView ID="grdProducts" runat="server" AutoGenerateColumns="False"   
              DataSourceID="odsProduct" AllowPaging="True"  > 
             <Columns> 
                ....  
              </Columns>           
           </asp:GridView>         
           <asp:ObjectDataSource ID="odsProduct" runat="server"   
              OldValuesParameterFormatString="original_{0}" SelectMethod="TraerListaClientes"   
              TypeName="oNegocio"></asp:ObjectDataSource> 

    Agregas una aspx, agregas el GridView, agregas el ObjectDataSource. Y sin hacer nada código en Load ni nada. Además que un GridView soporta formato, paginación, eventos de actualización, y otras cosas más.

    Recomendación: No usar asp:Table, si quieres algo personalizado usa Repeater o ListView.

    P.D.: Si la respuesta fue útil, marcala como respuesta correcta.

    Saludos,
    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    • Marcado como respuesta FAFNER viernes, 20 de marzo de 2009 0:20
    viernes, 20 de marzo de 2009 0:08
  • Es que esta funcionando del tipo objecto, entonces las operaciones CRUD va tener que pasarle un objeto. Lo importante aquí es aplicar el DataKeyNames.

    Ahora en tu tu metodo update_Rol_Desactivar, tu ya puedes cambiar el código y sólo pasa el ID:

    update_Rol_Desactivar( TOEmpleadoRol objRol)
    {
        DARol.Desactivar(objRol.Codigo);
    }

    Y asi normal eliminas.

    Saludos,
    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    • Marcado como respuesta FAFNER lunes, 23 de marzo de 2009 17:38
    lunes, 23 de marzo de 2009 16:20

Todas las respuestas

  • Visual Studio 2003, trabajaba con Web Applications.

    Visual Studio 2005, no existen Web Applications, ahora existen los Web Sites, que són más fáciles de portar. Cualquier carpeta puede ser un Sitio Web.

    Visual Studio 2005 SP1, debido a todo la gente de empresa tenía miedo migrar sus proyectos VS2003 a VS2005, por que simplemente no funcionaba nada, migrar un Web Application a Web Site. El SP1, traía nuevamente el Web Application, ahora todos los proyectos con VS2003 se pueden migrar sin problemas a VS2005.

    Visual Studio 2008, muchos proyectos de comunidad (por lo fácil de portar) se crearon usando Web Site, y sigue vigente. Web application también sigue vigente.

    La recomendación es: Si vas liberar un proyecto de ejemplo o para la comunidad, usa Web Site (por lo portabilidad), si vas hacer un desarrollo empresarial usa Web Application (por una mejor compilación y más controlada). Esta no es la recomendación oficial, si no una personal.

    Leer un poco más, siendo sinceros mucho más: Inline, beside, behind, Web Site Project, Web Application Project, y bla bla bla...

    Saludos,
    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    • Marcado como respuesta FAFNER viernes, 20 de marzo de 2009 0:20
    jueves, 19 de marzo de 2009 22:42
  • Doctor! ante todo gracias por la respuesta. Entonces me recomiendas que si es una aplicacion relativamente grande seria mejor usar Web Application.  Lo que tambien me he dado cuenta es que haciendo un click derecho  a un sitio web , tengo la opcion de publicarlo, esto tambien esta disponible con una Aplicacion Web...?

    Ahh y aprovechando doctor!

    Aqui tengo una consulta :



    Hace unos dias alguien, con un poco mas de conocimientos que el que escribe me sugirió hacer un llenado de un gridview de la siguiente manera:



    1 
    2 Collection<Cliente> lista = new Collection<Cliente>(); 
    3 
    4 Celda oTd = new Celda(); 
    5 Filas oTr = new Filas(); 
    6
    7#region Cargar listado 
    8            try 
    9            { 
    10                 
    11 
    12                lista = oNegocio.TraerListaClientes(); 
    13 
    14                tbDetalle.Rows.Clear(); 
    15 
    16 
    17                foreach (Cliente item in lista) 
    18                { 
    19                    # region Dibuja tabla 
    20                    oTr = new Filas(); 
    21                    oTr.OnMouseOver("PintarLinea(this)"); 
    22                    oTr.OnMouseOut("NoPintarLinea(this)"); 
    23                    oTr.Height = Unit.Pixel(21); 
    24 
    25                    oTd = new Celda(); 
    26                    oTd.Text = item.Codigo.ToString(); 
    27                    oTd.Width = Unit.Percentage(10); 
    28                    if (oTd.Text.Trim() == "") oTd.Text = "&nbsp"
    29                    oTd.CssClass = "LineCeldaAbajo"
    30                    oTr.Cells.Add(oTd); 
    31 
    32                    tbDetalle.Rows.Add(oTr); 
    33
    34                    #endregion 
    35                } 
    36                if (tbDetalle.Rows.Count == 0) 
    37                { 
    38                    oTd = new Celda(); 
    39                    oTd.Text = oNegocio.Error(); 
    40                    oTd.CssClass = "LineCeldaAbajo"
    41 
    42                    oTr.Cells.Add(oTd); 
    43                    tbDetalle.Rows.Add(oTr); 
    44                } 
    45            } 
    46            catch (Exception ex) 
    47            { 
    48                throw (ex); 
    49            } 
    50            #endregion 
    51 
    52 
    53 
    54 
     
    en donde :

    1public class Celda : TableCell 
    2    { 
    3        public Celda(); 
    4    } 
    5 
    6 
    7 public class Filas : TableRow 
    8    { 
    9        public Filas(); 
    10 
    11        public void OnClick(string pFunction); 
    12        public void OnMouseOut(string pFunction); 
    13        public void OnMouseOver(string pFunction); 
    14    } 


    Ahh y ademas el tbDetalle se define de la siguiente manera:

    1<asp:Table ID="tbDetalle" runat="server" HorizontalAlign="Center" Width="98%"
    2                                    </asp:Table> 



    Bueno mi pregunta contreta es cual es la diferencia de hacerlo de esta manera a mostrar lo mismo pero con un gridview usando un objectdatasource, claro contando con los objetos de negocio correspondientes para ambos casos.



    Saludos y gracias por la atención prestada.



    El hombre mas poderoso del mundo es aquel que es dueño de si mismo
    jueves, 19 de marzo de 2009 23:34
  • Si, también esta disponible la opción Publish Web, en los Web Application.

    En cuanto asp:Table y el GridView, es con el Table tienes que hacer un foreach (más código) para mostrar información. El table, no tiene columnas personalizadas (HyperLinkField). Lo único bueno que tendría el asp:Table, es personalización, pero para eso usas un Repeater. A simple vista no le veo ninguna ventaja al asp:table, más que decir que tu escribes más código.

    Con un gridView y un ObjectDataSource sólo haces lo siguiente

      <asp:GridView ID="grdProducts" runat="server" AutoGenerateColumns="False"   
              DataSourceID="odsProduct" AllowPaging="True"  > 
             <Columns> 
                ....  
              </Columns>           
           </asp:GridView>         
           <asp:ObjectDataSource ID="odsProduct" runat="server"   
              OldValuesParameterFormatString="original_{0}" SelectMethod="TraerListaClientes"   
              TypeName="oNegocio"></asp:ObjectDataSource> 

    Agregas una aspx, agregas el GridView, agregas el ObjectDataSource. Y sin hacer nada código en Load ni nada. Además que un GridView soporta formato, paginación, eventos de actualización, y otras cosas más.

    Recomendación: No usar asp:Table, si quieres algo personalizado usa Repeater o ListView.

    P.D.: Si la respuesta fue útil, marcala como respuesta correcta.

    Saludos,
    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    • Marcado como respuesta FAFNER viernes, 20 de marzo de 2009 0:20
    viernes, 20 de marzo de 2009 0:08
  • Buena doctor! gracias por las respuestas,  ya estoy casi satisfecho jeje...
    Bueno justo en estos momentos se me ha pesentado algo, tengo una pagina con un gridview llenado con un objectdatasource, coloque un checkbox en la primera columna de manera que al checkearlos pueda desactivar a todos aquellos registros que se seleccionaron.

    Esto fue lo que puse en el evento click del boton que va a eliminar:

    1
    BOOrganizacion oOrganizacion = new BOOrganizacion(); 
    2
     
    3
                List<int> codigos = new List<int>(); 
    4
                foreach (GridViewRow item in GridView1.Rows) 
    5
                { 
    6
                    CheckBox oCheck = (CheckBox)item.FindControl("chkEliminar"); 
    7
                    HyperLink oLinkButton = (HyperLink)item.FindControl("lnkCodigo"); 
    8
     
    9
                    if (oCheck != null
    10
                    { 
    11
                        if (oCheck.Checked) 
    12
                        { 
    13
                            codigos.Add(int.Parse(oLinkButton.Text)); 
    14
                        } 
    15
     
    16
                    } 
    17
                } 
    18
     
    19
                foreach (int codigo in codigos) 
    20
                { 
    21
                    oOrganizacion.update_Rol_Flag(codigo, EnumFlagEstado.Inactivo); 
    22
                } 
    23
                GridView1.DataBind(); 
    24
                lblMessage.Text = "[ Los Roles seleccionados fueron eliminados satisfactoriamente ]"
    25
     

    Todo bien y se ejecuta bien , salvo algunas observaciones que me puedas dar con respecto a este codigo(si esta bien o si existe una manera mas optima siguiendo las buenas practicas).

    Luego de ejecutar este evento se desactivan los registros y dejan de visualizarse en la grilla, luego hice una prueba activando a todos  por medio de un update en la base de datos , luego al volver a la pagina y hacerle un F5 me doy con la sorpresa de que el listado no se actualiza con todos los registros activos, he revisado mediante el sql profile y veo que se vuelve a ejecutar los metodos del negocio que se encargan de desactivar a los registros seleccionados, es mas hice una pueba colocando unos cortes para hacerle el debug en codigo fuente y ver si cae luego de darle F5 pero no entra. A que se debe, es como si despues de darle el refresh con F5 se volviera a ejecutar el evento del boton que desactiva....
    Como puedo solucionar esto... 

    gracias doctor por la atención prestada...

    Saludos.




    El hombre mas poderoso del mundo es aquel que es dueño de si mismo
    viernes, 20 de marzo de 2009 0:37
  • El F5, a veces produce resultados no deseados como que no produce el postback y carga la versión anterior.

    En lugar de hacer F5, prueba abriendo la página en una nuevo tab o pestaña del navegador.

    Saludos,
    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    viernes, 20 de marzo de 2009 14:12
  • Bueno , trate de solucionar eso de la carga cuando se hace F5 y hasta ahora no he dado con el resultado esperado. El problema principal es que a veces el usuario suele dar F5 para actualizar la pagina, y asi como la tengo, lo que en realidad haría es volver a ejecutar el llamado al metodo del boton Eliminar...

    ?????

    El hombre mas poderoso del mundo es aquel que es dueño de si mismo
    domingo, 22 de marzo de 2009 18:15
  • Lo que tu puedes hacer es agregar un botón a tu página "Actualizar", y enseñarle al usuario que la navegación con tu Aplicación Web: es a través de tu menú y de tus botones, no puede usar el botón atrás del navegador o el botón recargar del navegador.

    Me parece que el tema va por ahí, enseñarle al usuario que eso no funcionará dentro de la aplicación Web.

    De lo contrario, vas a tener que trabajar con JavaScript, y DOM del browser.... pero esa es otra historia...

    Saludos,
    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    lunes, 23 de marzo de 2009 13:41
  • Pues si, esa me parece que es la solución y va por alli jeje.
    Ahh Doctor y gracias por atención prestada.

    Ahh doctor , justo acá tengo otra duda( ya esto es un abuso jeje)

    que lo postee aqui tambien :
    http://social.msdn.microsoft.com/Forums/es-ES/netfxwebes/thread/6327421e-4980-42c0-922b-3029aa87b968

    pero aqui te lo copio jeje :

    ... actualmente estoy haciendo uso de un formview y un objectdatasource para realizar un mantenimiento:
    1<asp:ObjectDataSource ID="odMantenimiento" runat="server" DataObjectTypeName="SISA.BE.TOEmpleadoRol" 
    2            DeleteMethod="update_Rol_Desactivar" InsertMethod="insert_Rol" SelectMethod="obtener_Rol" 
    3            TypeName="SISA.BO.BOOrganizacion" UpdateMethod="update_Rol" OnInserted="odMantenimiento_Inserted" 
    4            OnDeleted="odMantenimiento_Deleted" OnUpdated="odMantenimiento_Updated"
    5            <DeleteParameters> 
    6                <asp:Parameter Name="pRol_codigo" Type="Int32" /> 
    7            </DeleteParameters> 
    8            <SelectParameters> 
    9                <asp:QueryStringParameter DefaultValue="-1" Name="pRol_codigo" QueryStringField="pCodigoRol" 
    10                    Type="Int32" /> 
    11            </SelectParameters> 
    12        </asp:ObjectDataSource> 

    Como se puede observar al eliminar hago un llamado al metodo update_Rol_Desactivar ubicado en mi capa de negocios, el problema es que cuando ejecuto esto siempre me da el siguiente error.
    ObjectDataSource 'odMantenimiento' no pudo encontrar un método 'update_Rol_Desactivar' no genérico que tome los parámetros del tipo 'SISA.BE.TOEmpleadoRol'.  
    Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.  
     
    Detalles de la excepción: System.InvalidOperationException: ObjectDataSource 'odMantenimiento' no pudo encontrar un método 'update_Rol_Desactivar' no genérico que tome los parámetros del tipo 'SISA.BE.TOEmpleadoRol'. 
     
    Error de código fuente:  
     
     
    Línea 41:         void btnEliminar_OnClick(object sender, EventArgs e) 
    Línea 42:         { 
    Línea 43:             FormView1.DeleteItem(); 
    Línea 44:         } 
    Línea 45:  
      
     

    No entiendo, al seleccionar el metodo en el objectdatasource para eliminar le asigno
    update_Rol_Desactivar que ademas posee un parametro que será el codigo de Rol.

    Ahh, hice una prueba añadiendo una sobrecarga a ese metodo que me recibiera como parametro un objeto de tipo TOEmpleadoRol y ya internamente manejaba la llamada con el codigo, y con esto si me funcionó, a que se debe esto... por que no funciono con la primera sobrecarga y si con la segunda, y a caso siempre que necesite eliminar debo de poner como parametro todo el objeto y no solo un valor que reporesente el codigo.... ????

    Saludos y gracias de antemano.



    El hombre mas poderoso del mundo es aquel que es dueño de si mismo
    lunes, 23 de marzo de 2009 14:40
  • Es que esta funcionando del tipo objecto, entonces las operaciones CRUD va tener que pasarle un objeto. Lo importante aquí es aplicar el DataKeyNames.

    Ahora en tu tu metodo update_Rol_Desactivar, tu ya puedes cambiar el código y sólo pasa el ID:

    update_Rol_Desactivar( TOEmpleadoRol objRol)
    {
        DARol.Desactivar(objRol.Codigo);
    }

    Y asi normal eliminas.

    Saludos,
    Sergio Tarrillo - http://sergiot2.com/blog/
    Si la respuesta ha sido de utilidad marca la como respuesta correcta.
    • Marcado como respuesta FAFNER lunes, 23 de marzo de 2009 17:38
    lunes, 23 de marzo de 2009 16:20
  • Doctor!
    Muchas gracias, eso me reolvio el problema de las mil maravillas.

    Gracias por el tiempo, y espero volver a encontrarte un una proxima consulta que sospecho esta muy cerca jajaja...

    Nos vemos y Saludos.

    El hombre mas poderoso del mundo es aquel que es dueño de si mismo
    lunes, 23 de marzo de 2009 17:38