2010-10-17 14 views
13

Supongamos que estoy creando un clon de StackOverflow utilizando formularios web ASP.NET y jQuery. La página de Preguntas tiene una pregunta, varias respuestas y comentarios debajo de cada una. Requisitos:Opciones para la página ASP.NET con marcado correspondiente del lado del cliente y del lado del servidor

  1. Los usuarios pueden publicar nuevas respuestas y comentarios, y editar los existentes, sin devoluciones.
  2. Sin UpdatePanels; las llamadas AJAX recuperan solo el JSON que necesitan, no fragmentos de HTML.
  3. La página se carga con todas las respuestas y comentarios existentes (no es necesario ejecutar javascript para leer la página).

Lo que estoy tratando de averiguar es cómo hacer esto sin tener que mantener dos conjuntos de marcas (uno que está destinado en el cliente utilizando alguna forma de jQuery de plantillas, y uno que está destinado en el servidor de manera artesanal WebForms).

¿Cuáles son mis opciones?

+0

+1 buena pregunta, también tengo el mismo problema, pero todavía no conozco la solución, siempre que necesito cambiar algo en la página, lo cambio tanto en 'página aspx' como en 'plantilla html'. –

Respuesta

1

Si bien no es exactamente lo que solicitó, puede considerar renderizar el HTML en el servidor a través de un servicio (no usando el panel de actualización) y enviarlo al cliente en lugar de usar plantillas de cliente.No podría ser tan malo porque Facebook lo está haciendo: http://www.facebook.com/video/video.php?v=596368660334 Si es adecuado en su situación depende de qué tan rico es su marcado y qué porcentaje de los datos enviados a través del cable serán de marcado en lugar de contenido.

+0

Creo que este es probablemente el enfoque más inteligente. Desafortunadamente, parece que FB tomó el video antes de que yo pudiera verlo todo, ¿hay alguna idea de si está disponible en otro lado? –

+0

N/M - lo encontré aquí: http://www.livestream.com/facebookhq/video?clipId=pla_89900c3b-ed61-457a-a571-4c7cfbcf2234&utm_source=lslibrary&utm_medium=ui-thumb –

+0

La parte más relevante de este problema es una pregunta de la audiencia alrededor de las 40:55. –

1

No utiliza jQuery pero el motor de vista Spark proporciona una clase JavascriptViewResult que le permite representar plantillas en el cliente y en el servidor. Esto está destinado a la situación exacta que describes. Ver this post por K. Scott Allen para una explicación simple de cómo funciona esto.

Puede usar la misma página Ver en el servidor y el cliente. En el servidor, pasa un objeto viewmodel a la vista y en el cliente lo pasa un objeto JSON. Incluso puede incluir código en sus vistas siempre que sea un código válido para los lenguajes C# y JavaScript. Por ejemplo, var x = 1; compilará en C# y Javascript.

+0

+1 parece prometedor –

+0

Entonces, ¿cómo se usa Spark y JavaScriptViewResult en WebForms? – Stilgar

+0

No, funciona para MVC. Lo siento, perdí esa palabra en tu pregunta. Considero que WebForms es completamente inadecuado para el tipo de solución que está buscando, así que simplemente asumí el MVC. Es posible mezclar Web Forms y MVC juntos en el mismo proyecto, por lo que aún sería posible usar un controlador MVC y ver esta parte de su aplicación. –

0

Se puede usar en combinaciones con javscriptdotnetembeddedjs

De esa manera usted sería capaz de volver a utilizar las mismas plantillas en ambos lugares.

Personalmente, creo que esto suele ser un exceso. Estarías presentando muchas dependencias que son difíciles de administrar.

0

Puede usar el método String.format JavaScript que se define en los scripts cargados por ScriptManager (o busque una implementación alternativa here). Es un análogo del método String.Format .Net.

string CommentTpl = "<div class='comment {0}'>{1}</div>"; 

Con String.format que puede hacer que esta plantilla tanto en el cliente y el servidor. Simplemente no te olvides de escaparte correctamente de JavaScript.

0

¿Por qué no utilizar simplemente un archivo html de plantilla y cargarlo desde JavaScript y desde el servidor? En JavaScript, obtienes la plantilla HTML una vez para todos los elementos en los que se usa (almacenarla en una variable o algo así).

A continuación, puede realizar reemplazos de cadena en ambos y está listo para hacer solo un lugar para realizar actualizaciones HTML.

1

No sé si esto es potencialmente una opción, pero esto se vuelve relativamente trivial usando ASP.net MVC. Por ejemplo, tiene una vista parcial para una respuesta, y esto es parte del marcado en la página. A continuación, también tiene una acción en su controlador que lleva, por ejemplo, una id de respuesta, que simplemente devuelve el html renderizado desde esa vista parcial, que luego puede ser ranurado en el documento.

Lo he usado en algunos lugares y considero que es un método muy limpio.

0

Elimine todos los controles en ASP.NET y use solo marcado HTML con Javascript y CSS.

ASP.NET abstracts the presentation layer lejos de los desarrolladores, sin embargo, la buena noticia es que no tiene que utilizar los controles web para escribir un hermoso sitio web usando .NET. Lea más abajo en la publicación: "don’t throw the baby (.NET) out with the bath water (ASP.NET)".

Aún puede conservar .NET para pasar bits de información entre el front-end y la base de datos (usando JSON no Postbacks) y manejando otros bits de lógica como la seguridad y el inicio de sesión que no pueden ser manejados por el cliente.

Debe ser sencillo sin dejar de añadir marcado de forma dinámica para que su página se carga con contenido de forma automática, como sigue:

<% foreach (Post post in PostList) { %> 
<h2><%= post.Title %></h2> 
<p><%= post.Content %></p> 
<% } %> 

Básicamente, mantener el nivel medio al mínimo (por ejemplo, usando ASHX "manipuladores genéricos" en lugar de aspx "Pages" siempre que sea posible) si no quieres empezar a confundirte con el marcado ASP.NET gratuito y agregar bloatware como ViewState.

Cuestiones relacionadas