Generando página HTML en C # – Mejores prácticas

Tengo que generar una gran página html en mi código C # (no es un sitio, solo un gran informe html de una sola página)

La página contiene secciones diferentes comstackdas en una página. Cada sección contiene estilos CSS, partes de JavaScript y un cuerpo relacionado con ella. El estilo CSS son partes estáticas, secuencias de comandos y partes del cuerpo que se generan utilizando datos de entrada diferentes (texto csv).

Mi primera solución ingenua para simplificar la generación all-in-one es crear una función de generador:

private static string BuildHtmlPage(string[] cssParts, string[] scriptParts, string[] bodyParts) { var htmlPage = ""; htmlPage += @" "; htmlPage += "\n"; htmlPage += "\n\n"; foreach (var cssPart in cssParts) { htmlPage += cssPart +"\n"; } htmlPage += "\n"; htmlPage += @""; htmlPage += "window.onload = function() {"; foreach (var scriptPart in scriptParts) { htmlPage += scriptPart + "\n"; } htmlPage += @"} "; htmlPage += "\n"; htmlPage += "\n\n"; foreach (var bodyPart in bodyParts) { htmlPage += bodyPart + "\n"; } htmlPage += "\n"; htmlPage += "\n"; return htmlPage; } 

Luego para generar un html “pequeño” y usarlo así:

 var htmlResult = BuildHtmlPage( new [] {style1, style2 }, new [] {script1, script2, script3 }, new [] {body1, body2, body3 } ); 

Hizo que mi código fuera un poco más limpio, pero todavía se ve feo y difícil de mantener debido a una gran cantidad de código html mezclado en el código C #.

¿Qué ideas para manejar tal tarea podría sugerir? Primero, me refiero a la separación del código html de C #.

Este es un enfoque muy limpio que le dará todas las funciones que obtiene de una aplicación web, el formato de Visual Studio de HTML, Razor (básicamente todo dentro de un proyecto MVC):

  1. Crea un proyecto ASP.NET MVC.
  2. Cree su vista como si estuviera creando una vista MVC.
  3. Una vez que esté satisfecho con la apariencia, cree otra aplicación (consola, formularios Windows, etc.) y haga referencia a la aplicación MVC desde allí.
  4. En lugar de usar el navegador, la aplicación de consola puede obtener la vista desde la aplicación MVC.

En lo sucesivo, voy a suponer que tenemos una aplicación de consola que usará la aplicación MVC.

Pasos para configurar la aplicación MVC

Estos pasos precomstackrán sus vistas. Por lo tanto, más adelante podremos acceder a las vistas directamente desde la aplicación de la consola.

  1. Haga clic derecho en su proyecto MVC y agregue estos paquetes NuGet:
    1. RazorGenerator.MsBuild
    2. RazorGenerator.Mvc
  2. Abra el archivo .csproj su proyecto MVC en el bloc de notas y agregue estos elementos:

    1.En el elemento de PropertyGroup superior, agregue true

    2. Al final del archivo, agregue:

        

    3. Construye el proyecto. Necesitamos asegurarnos de que las vistas estén comstackdas. Para asegurarse de que realmente se esté comstackndo, en el archivo .cshtml escriba un código que no comstack. Cuando comstack, si todo se ha configurado correctamente, la comstackción debería fallar, lo que indica que el comstackdor también comstack las vistas. Si no falla, uno de los pasos anteriores no se realizó como se especifica. Si falla, buenas noticias. Eliminar el error y comstackr de nuevo.

Pasos para configurar la aplicación de la consola

  1. Haga clic con el botón derecho en el proyecto y agregue RazorGenerator.Testing . Aunque no estamos probando, usaremos esta biblioteca para generar el HTML de las vistas.
  2. Agregue una referencia a la aplicación MVC como si estuviera haciendo referencia a una DLL.
  3. Haga clic con el botón derecho en la referencia del proyecto MVC y seleccione View in Object Browser desde el menú contextual. Sus puntos de vista estarán dentro del espacio de nombres ASP . Por favor, tenga en cuenta el nombre de la vista.
  4. Cree una instancia de su vista como se muestra en Uso a continuación y listo. Por ejemplo, el nombre de mi vista era _Views_Test_Index_cshtml .

Como puede ver, la mayoría de los pasos anteriores son solo la configuración.

Uso

Hice una prueba rápida y este era todo el código que necesitaba:

 var view = new ASP._Views_Test_Index_cshtml(); view.ViewBag.Model = new List() { "One", "Two", "Three" }; var html = view.RenderAsHtml(); 

Como View.Model es de solo lectura, utilicé ViewBag.Model para establecer el modelo para la vista. Y aquí está la vista:

 @{ ViewBag.Title = "Index"; var MyModel = this.ViewBag.Model as List; } @for (int i = 0; i < MyModel.Count ; i++) {  } 

Y aquí está el HTML generado:

    

Puedes pasar lo que necesites en ViewBag a tu vista. Puede encontrar este artículo útil.