Alternar estilos css sin repetir el código en AlternateItemTemplate

Podemos reducir este código, en el que tendríamos que duplicar los elementos en el Item y en el AlternateItem:


                <ItemTemplate>
                    <div class="impar">
                        <asp:Label ID="lblNombrePase" Text="Pase:" runat="server" />
                        <asp:Label Text="" runat="server" />
                        <asp:Label ID="lblFecha" Text="Fecha:" runat="server" />
                        <asp:Label Text="" runat="server" />
                    </div>
                </ItemTemplate>
                <AlternateItemTemplate>
                    <div class="impar">
                        <asp:Label ID="lblNombrePase" Text="Pase:" runat="server" />
                        <asp:Label Text="" runat="server" />
                        <asp:Label ID="lblFecha" Text="Fecha:" runat="server" />
                        <asp:Label Text="" runat="server" />
                    </div>
                </AlternateItemTemplate>

Y lo podemos dejar así, creando la clase dinamicamente en función del indice del elemento. Y creando solo una vez el lenguaje de marcado.


                <ItemTemplate>
                    <div class="%#(IIf((Container.DataItemIndex Mod 2) = 1, "impar", "par")) %>">
                        <asp:Label ID="lblNombrePase" Text="Pase:" runat="server" />
                        <asp:Label Text="" runat="server" />
                        <asp:Label ID="lblFecha" Text="Fecha:" runat="server" />
                        <asp:Label Text="" runat="server" />
                    </div>
                </ItemTemplate>
              

Esto es válido para todos los controles repetidores de este tipo.

Mandar a descargar un fichero vía ASP.NET

Este es un fragmento de código para decirle al servidor, que descargue un fichero llamado “Descargale.jpg” desde el servidor, y que lo haga con el nombre de “Descargado.jpg”

Dim file As System.IO.FileInfo 
fila= New System.IO.FileInfo("C:\MiCarpeta\descargable.jpg")
Response.AddHeader("Content-Disposition", "attachment;filename=descargado.jpg")
Response.AddHeader("Content-Length", file.Length.ToString())
Response.ContentType = file.Extension.ToLower()
Response.WriteFile(file.FullName)
Response.End()

Sintaxis resaltada Javascript y CSS en Android Studio

En la versión gratuira de Android Studio no existe un asociación de ficheros hacia javascript ni a hojas de estilos. Por tanto, cuando nos toca escribir en ese entorno, con dichos lenguajes, tenemos que escribirlo sin ningun resaltado ni ayuda de ningún tipo. Esto puede pasar para programadores de Phonegap/Cordova sobre AS.

Si no te gusta escribir en el bloc de notas y no quieres tener abierto a la vez, AS con Sublime Text o similares, puedes añadir un plugin a AS, que se encargue de decorarnos el código.

A mano con el editor

Una opción es hacerlo a manita, desde AS, en File -> Settings -> FileTypes y creando tanto en JS como el CSS, añadiendo una a una, todas las palabras reservadas.


settings

js

js2

 

A mano editando el XML de configuración

Puedes crear tu propio XML de configuración e importarlo desde File->Import Settings.

Estos ficheros se encontrarán en la ruta de Android Studio, en su carpeta config.

Tendrá un aspecto similar a este:

<?xml version="1.0" encoding="UTF-8"?>
<filetype binary="false" default_extension="" description="Javascript" name="Javascript">
  <highlighting>
    <options>
      <option name="LINE_COMMENT" value="//" />
      <option name="COMMENT_START" value="/*" />
      <option name="COMMENT_END" value="*/" />
      <option name="HEX_PREFIX" value="" />
      <option name="NUM_POSTFIXES" value="" />
      <option name="HAS_BRACES" value="true" />
      <option name="HAS_BRACKETS" value="true" />
      <option name="HAS_PARENS" value="true" />
      <option name="HAS_STRING_ESCAPES" value="true" />
    </options>
    <keywords keywords="break;case;catch;continue;debugger;default;delete;do;else;finally;for;function;if;in;instanceof;new;return;switch;this;throw;try;typeof;var;void;while;with" ignore_case="false" />
  </highlighting>
  <extensionMap>
    <mapping ext="js" />
  </extensionMap>
</filetype>

Importar librerías ya hechas

Si no quieres escribirte tu propio plugin, puedes obtener alguno de los que hay en la red, por ejemplo.

Libreria js y css para Android Studio de peter-schmalfeldt

Escrito por peter-schmalfeldt y que aceptará gustoso colaboraciones.

Antes y después

Para que se vea claro, pongo dos imágenes del mismo código antes y despues. Hemos ganado.

Antes

ejemplo2
 

Despues

ejemplo

 

 

Seguridad en MVC 4 Parte I

Hay tres tipos de seguridad que podemos aplicar:

Autenticación Formularios
Autenticación Windows
Autenticación oAuth / OpenID

Autenticación Formularios

Crearemos un formulario típico de lógin y aplicaremos lo necesario para comprobar la identidad del usuario en nuestra base de datos. Este modo nos permite crear contraseñas fuertes y personalizables. Se gestiona internamente con cookies con lo cuál se guardan el login en el navegador y tampoco es necesario que tengan que logarse todo el rato. Lo costoso es que requiere SSL o acceso HTTPs para evitar el envío de contraseñas sin cifrar a través de la red.

 

oAuth OpenID

Implica que nuestro sistema no almacena la contraseña del usuario. Esto se hace confiando en sitios de terceros, como Twitter, Facebook, etc, que son quienes realizan el login y nos pasan la información necesaria. Se denominan 3rd Party Identity Providers y nos evitan la gestión de credenciales.

 

Autenticación Windows

También llamada integrada y Single Sign On. Usada en Intranets, ya que la validación es con el propio usuario de la sesión de Windows, dentro de un dominio tras el firewall y con un servidor de directorio activo.

Es cómodo  ya que el usuario no tiene que logarse en la aplicación y además permite acceso a recursos compartidos de red, impresoras, etc.

 

Ejemplo con autenticación Windows

Hay que crear un proyecto MVC, de tipo Intranet. Despues en las propiedades del proyecto F4,  permitir Autenticación de Windows.

propiedades

Si ejecutamos, el navegador nos solicitará nuestras credenciales de Windows. ¿Por qué pide credenciales si estamos en una intranet y debería coger automaticamente nuestro usuario de Windows? Esto sucede porque IE pide las credenciales si considera que no estás en la intranet. No reconoce localhost como parte de la intranet y debemos añadirla para que la validación sea automática.

Por tanto, hay que ir a IE, Herramientas, Opciones de Internet, Seguridad, Intranet Local  y luego en Sitios, Opciones Avanzadas y añadir LocalHost.

localhostTras esto, ya no nos pedirá login y podremos acceder a la información del usuario.

Se puede mostrar el nombre del usuario en una vista con : Soy: @User.Identity.Name
También podemos ver el tipo de Autenticación con @User.Identity.AuthenticationType o si está o no autenticado con: @User.Identity.IsAuthenticated

En este modo de autenticación, el WebConfig presentará una línea como esta:

 

 <authentication mode="Windows" />