¿Cómo espolvorear-en ASP.Net MVC en un Proyecto de Sitio Web existente? [cerrado]


Tengo un legado (jaja) ASP.Net Formularios Web Proyecto de Sitio Web en Visual Studio 2008 SP1, que me gustaría introducir gradualmente algunas funcionalidades MVC.

La mayor parte de la información que puedo localizar sobre cómo integrar ASP.Net MVC con WebForms parece asumir el uso de un Proyecto de Aplicación Web. Sin embargo, parece imposible encontrar información sobre cómo modernizar un ASP.net Web Site Project with the ASP.Net MVC función.

He revisado El post de Scott Hanselmany el Capítulo 13de su próximo libro, los cuales asumen el tipo Web Application Project.

Es esto posible? ¿Alguien tiene un cómo - a en esto?

Author: Kris, 2009-02-21

8 answers

Bueno para empezar agregar MVC a un proyecto de webforms es bastante simple, para obtener las características en VS 2008 para MVC toma un poco más de trabajo (todavía fácil). Primero debe asegurarse de que hace referencia a los ensamblados y está utilizando. Net 3.5. En segundo lugar, puede crear una carpeta controllers y una carpeta views en su proyecto actual de formularios web. También puede crear un controlador simple con una acción de índice. A continuación, configurar / configurar las rutas en el global.archivo ascx. Deberías estar listo desde ahí. Comprobar aquí para referencia.

Sin embargo, solo podrá crear páginas aspx con código detrás (puede eliminarlas e ingresar la clase de herencia correcta en el marcado). Para realmente "convertir" su tipo de proyecto para que obtenga la bondad de MVC y visual studio (agregar nueva vista, controlador goto, etc.) va a tomar un poco de juego. Mi mejor consejo es crear un nuevo proyecto MVC en VS 2008 y un nuevo proyecto de aplicación Web y comparar el .archivos csproj en texto plano. Hay un valor de cadena larga que indica VS la plantilla del proyecto.

Créanme que esto funciona. Lo he hecho antes en mis propios proyectos de legado. No recuerdo cómo encontré el tipo de proyecto "clave" además de ensayo / error / eliminación. ASP.Net MVC juega bien en el mismo proyecto que webforms.

UPDATE: Creo que puede cambiar a un tipo de proyecto MVC, que sigue siendo una aplicación web mediante el uso de estos en el PropertyGroup de la .archivo csproj. Compara esos con lo que tienes y cambiar el que son diferentes, asegúrese de copiar / copia de seguridad del archivo.

<ProjectGuid>{B99EC98A-1F09-4245-B00D-5AF985190AA9}</ProjectGuid>
<ProjectTypeGuids>{603c0e0b-db56-11dc-be95-000d561079b0};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

Actualización 2: No afectarías tu proyecto ni lo impactarías mucho. Si usted es un fácil al respecto hacer una copia de seguridad y jugar. Si encuentra cambios, siempre tendrá la copia de seguridad. Yo era escéptico al principio, pero estaba contento de haber ido por el camino MVC.

 24
Author: Kyle LeNeau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-25 14:14:14

Pensé que daría una respuesta actualizada usando la utilidad totalmente no soportada de Visual Studio 2010 SP1 / NuGet / Scott Hanselman.

  1. Instalar MVC3 (con nuget) http://www.asp.net/mvc/mvc3
  2. Vaya al menú "Herramientas" en Visual Studio y seleccione "Library Package Manager" \ "Package Manager Console"
  3. Una vez que aparezca la ventana de la consola, cambie el "Proyecto predeterminado" para que sea su proyecto de formularios web.
  4. Escriba " Install-Package AddMvc3ToWebForms" ( http://nuget.org/List/Packages/AddMvc3ToWebForms )

Esto agregará todos los archivos DLL necesarios, archivos javascript, web.cambios de configuración, etc. en el proyecto. Si todo tuvo éxito, debería poder presionar F5, navegar a "inicio" en su sitio web y ver un formulario de muestra renderizado por mvc: "Bienvenido a ASP.NET MVC, actualizado con un paquete NuGet de una manera totalmente no compatible por Hanselman! No hay garantía!".

 19
Author: Jason,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-08 15:41:05

Para un proyecto de sitio web, solo necesita agregar Controladores a App_Code, no a la raíz. Te perderás algo de bondad VS, ya que no sabe que estás usando MVC sin el archivo csproj, pero en realidad lo harás funcionar.

Solo recuerde heredar de Controller y ViewPage y debería ser bueno.

 7
Author: Mark Brackett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-26 15:06:24

Tuve una muy grande ASP.NET sitio web (no una aplicación web) y quería añadir MVC3 a ella. No tenía opción de cambiar el tipo de proyecto, así que tuve que ir con el sitio web (asp.net 4.0).

Utilizo un proyecto MVC separado, pero no como su propia aplicación web, sino como un ensamblaje dentro de mi antiguo sitio web.

He aquí un resumen de lo que hice:

  • Creé una nueva aplicación web MVC3 en Visual Studio 2010, usé la plantilla vacía y la vista Razor motor.
  • Lo agregué a la solución con mi sitio web existente.
  • Cambié la ruta de salida para el ensamblado desde la papelera local directorio al directorio bin de mi sitio web.
  • Eliminé las carpetas 'Contenido' y 'Scripts' de la aplicación MVC. Ambos el contenido y los scripts ya son parte de mi sitio web y puedo haga referencia a estos desde las 'páginas' de MVC también.
  • Eliminé el Global.asax.* archivos del proyecto. Estoy usando el Global.asax en la web sitio.
  • Copié la carpeta y subcarpetas 'Views' en el sitio web. Porque estos son archivos reales y no parte de la asamblea, tienen que existir dentro del sitio web no es el proyecto que construye el ensamblaje MVC.
  • En este punto podría haber eliminado la carpeta 'Views' del proyecto MVC, pero es solo en este tipo de proyecto que obtengo soporte de Visual Studio para agregar una nueva vista. Así que a veces creo una vista aquí y luego la muevo al sitio web. Al editar el archivos cshtml en mi sitio web, todavía tengo Intellisense completo.
  • Se agregó enrutamiento al sitio web. Acabo de copiar un código de un MVC global.asax en el mundo.asax de mi sitio web. Necesitamos algunos usos:

    using System.Web.Mvc;
    using System.Web.Routing;
    

En Application_Start necesitamos:

    AreaRegistration.RegisterAllAreas();
    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);

Luego agregue los métodos de enrutamiento habituales:

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

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

        // your routes
    }

Luego agrega algunas cosas a la web.configuración de su sitio web. En el sistema.web en compilación necesitamos lo siguiente asambleas:

     <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </assemblies>

Inicialmente también agregué algunos espacios de nombres MVC a web.config pero parece funcionar bien sin ellos.

Ahora crea nuevas rutas en Global.asax del sitio web, luego agregue un controlador correspondiente en el proyecto MVC y luego vuelva al sitio web para agregar una vista para él. Por lo que la lógica es todo en un ensamblaje, mientras que las vistas y el enrutamiento se define en el sitio web.

Todavía puede depurar en los controladores MVC estableciendo puntos de interrupción allí, pero depurar iniciando el sitio web.

Si utiliza la ruta predeterminada sugerida de MVC:

        routes.MapRoute("Default", "{controller}/{action}/{id}", 
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

Una llamada a www.mysite.com servirá el contenido del controlador de inicio / ver no su antiguo predeterminado.aspx página de inicio, así que simplemente no uso tal ruta. Si las rutas entran en conflicto con carpetas y archivos físicos existentes, utilice restricciones con expresiones regulares en las rutas para excluir dichos conflictos.

A pesar de que uso páginas maestras en el sitio web, el html real para el común las partes de página se crean mediante código en otro ensamblado. Podría llamar a los mismos métodos desde mi _ViewStart.cshtml o mi controlador base.

Hasta ahora no he visto ninguna negativa real sobre este enfoque.

 6
Author: Peter Hahndorf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-17 09:36:43

Siempre que configure el enrutamiento en web.config, configure la estructura de directorios necesaria y agregue las rutas correctas en global.asax, teóricamente podría agregar elementos MVC a cualquier proyecto web. Por lo que sé, esos son los únicos requisitos para que funcione.

Sin embargo, la combinación de los dos puede ser un poco confusa y difícil de mantener, a largo plazo. Tal vez podría mover todo el contenido del sitio web forms existente en una subcarpeta para mantenerlo fuera del camino y mantener la raíz directorio del sitio limpio para reducir el desorden y hacer las cosas más claras.

 2
Author: Chris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-20 22:53:24

Si desea agregar MVC 3 a un asp.net sitio web en lugar de proyecto web, entonces el paquete AddMvc3ToWebForms nuget de Scott Hanselman le llevará el 99% del camino, pero lanzará un error durante la instalación que puede ignorar saefly (creo que, al menos en mis pruebas, este parece ser el caso), y se necesitan un par de pasos simples después de la instalación.

Detalles completos sobre http://delradiesdev.blogspot.com/2011/08/adding-mvc-3-to-aspnet-web-site.html

Mark (@delradie)

 1
Author: Mark Middlemist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-04 13:48:46

Algo que aprendo al intentar migrar una aplicación MVC2 es que tu proyecto necesita un Valor predeterminado.aspx. Se me encomendó la tarea de agregar algunas funciones GUI a un proyecto de Servicios Web existente, y por lo tanto no había un valor predeterminado.aspx. Me llevó un tiempo averiguar por qué mis rutas no estaban siendo configuradas.

 0
Author: Chris Kemp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-19 11:57:23

El examen Microsoft.NET 4.0 sobre desarrollo Web (70-519) tiene casi esta pregunta exacta en los materiales de preparación. La respuesta, según Microsoft entonces, es:

  1. Convierta el sitio web de formularios web en una aplicación web (es decir, un proyecto de aplicación web).
  2. Añadir referencias a "el ASP.NET MVC 2 assemblies" en el archivo de configuración de la webapp.

Esta información está en materiales pagados que mi empleador compró, por lo que no necesariamente hay una página web que lo indique claramente a la que podría enlace.

 0
Author: Lisa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-27 13:16:58