2010-01-18 14 views
9

i tienen un sitio web asp.net mvc donde construyo la mayor parte de la página utilizando C#, por ejemplo, la construcción de tablas html dado un conjunto de datos de mi modelo de vistaalguna idea para evitar el código duplicado en C# y JavaScript

i también tiene una gran cantidad de javascript que luego modifica dinámicamente estas tablas (por ejemplo, agrega una fila).

el código de javascript para agregar una nueva fila se ve muy similar a mi código de "representación" que tengo en C# que se usa para construir la tabla html en primer lugar.

Cada vez que cambio el código C# para agregar un nuevo campo, tengo que recordar volver al código JavaScript para hacer lo mismo.

¿hay una mejor manera aquí?

Respuesta

8

Una forma de hacerlo es exponiendo la lógica que genera el marcado como un servicio web en su servidor y que JavaScript obtenga ese marcado a través de una llamada AJAX en lugar de duplicar la lógica.

De esta manera puede llamar a algo así como un método CreateRow de JavaScript que realmente invocará la misma lógica exacta que utilizó en el servidor cuando procesó la página.

+0

esto es una gran idea. . puede ser un poco lento en comparación con tener el código ya en el lado del cliente, pero definitivamente hace ese trabajo de eliminar la redundancia. – leora

0

Mira el artículo de Scott Gu: ASP.NET MVC 2: Model Validation

Básicamente, se definen las validaciones a nivel de propiedad del modelo, y ASP.NET MVC 2 puede generar automáticamente la validación del lado del cliente adecuado también.

Desafortunadamente, esto puede significar que tendrá que refaccionar todo en MVC, pero muchas personas aquí probablemente lo verán como un plus.

(exención de responsabilidad: No he trabajado con ASP.NET MVC en absoluto)

+0

mi código no tiene nada que ver con la validación duplicada ... es más la construcción de html – leora

0

Al contrario de respuesta aceptada y popular por @ Andrew Hare. Prefiero implementar la generación de marcado solo en javascript (y reutilizarlo para crear tablas HTML) que implementar el marcado solo en C# (si javascript también necesita esa funcionalidad, por supuesto).

Porque:

  1. , JavaScript es es mejor que C# para el HTML, ya que puede modificar el DOM ya dictada. Entonces con Javascript puedes hacer mucho más que solo HTML estático. Y tal vez no lo necesite ahora, pero hoy en día no son raros los requisitos que apuntan a que la aplicación se parezca más a una aplicación de Internet enriquecida.
  2. Es más probable que las llamadas AJAX sean más lentas que la peor implementación de JavaScript que maneja datos del lado del servidor y los transforma en nuevas filas de una tabla existente. Y también más lento que hacer la tabla desde cero en Javascript.
  3. Menos solicitudes de servidor (y más requisitos del lado del cliente, pero eso generalmente no es un problema).
  4. Existen varios frameworks de Javascript muy buenos que hacen realmente buenas tablas (y mucho más).

Sé que ASP.NET MVC tiene muchos buenos ejemplos sobre cómo usar HTML Helpers para sus controles, lo que resulta en un desarrollo limpio y rápido. Pero si terminas creando funciones de Javascript de todas formas, entonces creo que deberías considerar nuevamente la separación de preocupaciones, y mantenerte con Javascript y descartar la duplicación en los HTML Helpers.

Porque expandir sus funciones de Javascript para crear toda la tabla si ya está creando las filas no debería ser tan difícil, supongo. Aquí hay una idea de cómo pasar los datos a Javascript y luego usar la función "CreateRow" que ya tiene en Javascript:

<script> 
    var data = []; 
    <% foreach (var item in Model) { %> 
     data.push({ 
      Id: <%= Html.Encode(item.Id) %> 
      , Title: <%= Html.Encode(item.Title) %> 
     }); 
    <% } %> 
    createTableHeader(); 
    for (var i = 0; i < data.length; i++) { 
     createRow(data[i]); 
    } 
    createTableFooter(); 
</script> 
Cuestiones relacionadas