Como sabeis en ASP tienes dos formas de programar. O haciendo todo el codigo en una sola página, o utilizando 2 archivos uno para el codigo ASP y otro para el código C· o VB según corresponda. Pero hay ocasiones en las que te interesa, por ejemplo, poder crear HTML dependiendo de una considicón dentro de un control de repetición, como puede ser un control Repeater o un control ListView. En este caso el ejemplo va a ser con un control Repeater.
Dentro de un ItemTemplate para poder acceder a las propiedades del DataSource debes de utilizar < % # Eval("Propiedad") % >. Y para poder escribir código se usa solo < % % >. Si intentamos escribir algo como < % Eval("Propiedad") % > el compilador nos devuelve un error de que para hacer Binding debemos utilizar < %# % >.
El problema viene de que entre < %# % >. no podemos escribir varias líneas de código. Pero sí podríamos escribir algo como < %# converto.ToBoolean(Eval("Propiedad")) ? "Texto cuando cierto": "Texto cuando falso"% >, y papeleta solucionada. Pero claro, si lo que queremos es escribir un bloque HTML con más bindings as otras propiedades, pues no es suficiente.
Yo siempre utilizo 2 archivos, me parece una forma un poco más limpia y controlada para el código. Así que vamos a explicar cúal es la solución que he encontrado para poder hacer esto que os comento. Primero os pongo el código del ejemplo y luego os cuento la película.
< asp:Repeater runat="server" ID="lstPublicVideos">
< ItemTemplate>
<% string file = ((System.Data.DataTable)lstPublicVideos.DataSource).Rows[this.Index]["adjunto"].ToString().ToLower();
bool isVideo = (file.Contains("mp") || file.Contains("webm"));
if (isVideo) { %>
< video class="embed-responsive-item" controls="controls">
Como puedes observar, he accedido al data source del control padre para así poder recoger el valor de la propiedad que necesito, para ello me he ayudado de un contador Index que me situa en la fila correcta del data source.
Luego realizo la comparación que necesito y escribo el código ASP necesario para representar el contenido, o un vídeo o una imagen.
Por lo tanto en el archivo del código declararemos una propiedad para utizarla de contador, Index. Y luego desde dentro del las iteraciones iremos incrementando el valor para recorrer las líneas. No olvidar incrementar el valor en la última línea de código, si no puedes obtener un Overflow o Fuera de Indice porque incrementas antes de acceder a la última fila.
Bueno y esto es todo, un pequeño truco hoy que puede resolver muchos dolores de cabeza en algunas ocasiones, o muchas.
Happy codding