ASP: creación de una página ASP. Espacios vacíos en guiones

Clase de página

Ahora que ha visto cuál es el ciclo de vida de una página y cómo una página contiene controles, es útil señalar que la página en sí también se instancia como un objeto de control. En realidad, todos los formularios web son en realidad instancias de la clase Página de ASP.NET, que se encuentra en el espacio de nombres. Sistema.Web.UI.

Probablemente ya lo hayas adivinado al notar que cada clase de código subyacente hereda claramente de System.Web.UI.Page. Esto significa que cada formulario web que cree obtiene inmediatamente una gran cantidad de funcionalidades, como el método FindControl() visto anteriormente y la propiedad IsPostBack. Además, heredar de Page también le da a su código acceso a las siguientes propiedades extremadamente útiles:

Muchas de estas propiedades corresponden objetos internos, que podría usarse en páginas web ASP clásicas. Sin embargo, en ASP clásico, se accedía a esta funcionalidad a través de objetos integrados que siempre estaban disponibles. En ASP.NET, cada uno de estos objetos integrados corresponde en realidad a una propiedad de página, que proporciona una instancia de una clase completamente funcional.

Estos objetos se describen con más detalle en las secciones siguientes.

Objetos de sesión, aplicación y caché

El objeto Session es una instancia de la clase. Sistema.Web.SessionState.HttpSessionState. Está diseñado para almacenar cualquier tipo de datos de usuario que deban persistir entre solicitudes de páginas web. El objeto Session proporciona acceso al diccionario a un conjunto de pares nombre-valor que representan datos de usuario para esa sesión. El estado de la sesión se utiliza a menudo para mantener información como el nombre y el ID de un usuario, el carrito de compras u otros elementos que se eliminan cuando el usuario ya no visita las páginas del sitio web.

El objeto Aplicación es una instancia de la clase. System.Web.HttpApplicationState. Al igual que el objeto Session, también es un diccionario de datos de nombre-valor. Sin embargo, estos datos son globales para toda la aplicación.

En cuanto al objeto Cache, es una instancia de la clase. Sistema.Web.Caching.Caché. También almacena información global, pero ofrece un mecanismo de almacenamiento más escalable porque ASP.NET puede eliminar objetos si el servidor se queda sin memoria. Al igual que otros conjuntos de estados, es esencialmente una colección de objetos de nombre-valor, pero también puede establecer políticas de caducidad personalizadas y definir dependencias para cada elemento.

Elegir cómo implementar la gestión estatal es una de las tareas clave en el desarrollo de una aplicación web.

Solicitar objeto

El objeto Request es una instancia de la clase System.Web.HttpRequest. Este objeto representa los valores y propiedades de la solicitud HTTP que resultó en la carga de la página. Contiene todos los parámetros relacionados con la URL, así como todos los demás datos enviados por el cliente. Mayoría de la información proporcionada por el objeto Solicitud está envuelta en abstracciones de más de alto nivel(por ejemplo, el contenedor del modelo de control web ASP.NET), por lo que no es tan importante como lo era en el desarrollo ASP clásico.

Sin embargo, el objeto Solicitud aún se puede utilizar, por ejemplo, para averiguar qué navegador está utilizando el cliente o para crear cookies y luego examinar su contenido.

La siguiente tabla enumera algunas de las propiedades más utilizadas del objeto Solicitud:

Propiedades del objeto HttpRequest Descripción de la propiedad
ID anónimo Identifica de forma única al usuario actual si se ha habilitado el acceso anónimo.
Ruta de aplicación y ruta de aplicación física ApplicationPath recupera información sobre la ubicación del directorio virtual (URL) de una aplicación ASP.NET y PhysicalPath recupera información sobre la ubicación de su directorio "real"
Navegador Proporciona una referencia a un objeto HttpBrowserCapabilities, que contiene propiedades que describen varios funcionalidad navegador, por ejemplo, si admite controles ActiveX, cookies, VBScript y marcos
Certificado de cliente Un objeto HttpClientCertificate que proporciona el certificado de seguridad para la solicitud actual, si existe.
Galletas Proporciona una colección de cookies enviadas con esta solicitud.
FilePath y CurrentExecutionFilePath Devuelve la ruta real al archivo (relativa al servidor) para el archivo que se está ejecutando en en este momento páginas. FilePath representa la página que inició el proceso de ejecución. Esto es lo mismo que CurrentExecutionFilePath a menos que haya movido al usuario a una nueva página sin una redirección (por ejemplo, usando el método Server.Transfer()), en cuyo caso CurrentExecutionFilePath refleja la nueva página y FilePath especifica la página original.
Forma Representa una colección de variables de formulario enviadas de vuelta a la página. En la mayoría de los casos, en lugar de utilizar una colección determinada, recuperará esta información de las propiedades del control.
Encabezados y variables del servidor Proporciona una colección de diccionario de encabezados HTTP y variables de servidor, indexados por nombre. Estas colecciones consisten en gran medida en información de bajo nivel enviada por el navegador junto con la solicitud web (por ejemplo, información sobre el tipo de navegador, la funcionalidad que admite, las características instaladas). configuración de idioma, identidades utilizadas para autenticar datos, etc.). Normalmente, esta información es mucho más fácil de obtener de otras propiedades del objeto HttpRequest o clases ASP.NET de nivel superior.
IsAuthenticated y IsSecureConnection Devuelve verdadero si el usuario se autentica correctamente y está conectado a través del protocolo Secure Sockets Layer (SSL).
Es local Devuelve verdadero si el usuario solicita la página desde la computadora local
Cadena de consulta Proporciona parámetros pasados ​​en la cadena de consulta.
URL y URLReferrer Devuelve un objeto Uri que representa la dirección de la página actual y la página de donde proviene el usuario ( pagina anterior que contiene un enlace a esta página)
Agente de usuario Una cadena que representa el tipo de navegador. Explorador de Internet proporciona el valor MSIE para esta propiedad. ASP.NET utiliza esta información para determinar qué tipo de navegador es estamos hablando de y, por lo tanto, determinar qué funcionalidad debe admitir este navegador (como cookies, JavaScript, etc.). Esto, a su vez, puede afectar la forma en que se representan los controles web.
Dirección de host de usuario y nombre de host de usuario Recupera la dirección IP y la información del nombre DNS. cliente remoto. También se puede acceder a esta información a través de la colección ServerVariables. Sin embargo, debido a la transmisión direcciones de red(Traducción de direcciones de red - NAT) no siempre es significativo. Dependiendo de cómo se conecten a Internet, muchos clientes pueden compartir la misma dirección IP (por ejemplo, la dirección IP de la computadora de puerta de enlace). Además, la dirección IP también puede cambiar después de realizar varias solicitudes.
Idiomas del usuario Proporciona una matriz de cadenas ordenadas que enumera las preferencias de idioma del cliente. Puede resultar útil al crear páginas multilingües.
Objeto de respuesta

El objeto Response es una instancia de la clase System.Web.HttpResponse y representa la respuesta del servidor web a una solicitud del cliente. Con desarrollo ASP clásico Objeto de respuesta era la única forma de enviar texto HTML mediante programación al cliente.

Los controles de servidor ahora contienen métodos anidados orientados a objetos para representarse a sí mismos. El desarrollador sólo necesita establecer los valores de sus propiedades. Así que el objeto Respuesta ya no es tan central como antes.

La siguiente tabla enumera algunos de los miembros más utilizados de la clase HttpResponse:

Miembros de la clase HttpResponse Método o propiedad Descripción
Salida del búfer Cuando esta propiedad se establece en verdadero (el valor predeterminado), la página no se envía al cliente hasta que se procesa y está lista para enviarse en su totalidad, en lugar de enviarse en partes. En algunos escenarios específicos tiene sentido establecer esta propiedad en falso.
El ejemplo más obvio es cuando un cliente descarga archivo grande. Si la propiedad BufferOutput se establece en falso, el cliente verá un cuadro de diálogo Guardar y podrá seleccionar un nombre de archivo antes de que el archivo se descargue por completo.
Cache Esta propiedad se refiere al objeto HttpCachePolicy, que le permite configurar el almacenamiento en caché de resultados.
Galletas Esta propiedad proporciona acceso a la colección de cookies que se envían junto con la respuesta. Se puede utilizar para agregar cookies adicionales.
Expires y ExpiresAbsolute Estas propiedades se pueden utilizar para almacenar en caché el HTML renderizado de una página, mejorando el rendimiento en solicitudes posteriores.
EstáClienteConectado Este es un valor booleano que indica si el cliente está conectado al servidor. Si aún no está conectado, es posible que deba detener alguna operación de larga duración.
Redirigir() Este método hace que el navegador solicite una URL diferente que apunte a una nueva página de aplicación web o a un sitio web diferente.
Redireccionamiento permanente() Este método redirige el navegador a la nueva URL, muy parecido al método Redirect(). La diferencia es que utiliza el código de estado HTTP 301 (que indica que la página se ha movido permanentemente) en lugar de 302 (que indica que la página se ha movido temporalmente).
RedirectToRoute() y RedirectToRoutePermanent() Estos métodos son similares a los métodos Redirect() y RedirectPermanent(). La única diferencia es que utilizan una ruta (un patrón de URL registrado que no se asigna directamente a la página)
Transferir() Este método le dice a ASP.NET que deje de procesar página actual y vaya a la nueva página (especificada) con el formulario web. En este caso no se requiere el ciclo completo de envío y notificación al navegador y al usuario de la aplicación web.
Solicitud de transferencia() Este método es similar a Transfer(), pero le permite transferir al usuario a un tipo diferente de página. Por ejemplo, se puede utilizar para enviar a un usuario desde un formulario web ASP.NET a una página HTML.
Cuando se utiliza, todo el proceso de IIS entra en acción para procesar el nuevo recurso, junto con todos los módulos HTTP asociados. Pero el método TransferRequest() tiene un número de asociados restricciones significativas. Para utilizarlo hay que utilizarlo. servidor web IIS 7 en modo integrado. Además, deberá liberar el estado de la sesión (si se adquirió) para evitar largas demoras.
Tipo de contenido Esta propiedad representa un encabezado que le dice al navegador qué tipo de contenido debe recibir. Normalmente, los formularios web ASP.NET, como todas las páginas web, utilizan contenido de texto/html (texto mezclado con HTML). Sin embargo, en principio se podría crear un controlador HTTP especial para servir otros tipos de contenido.
Flujo de salida Esta propiedad representa los datos enviados al navegador como un flujo de bytes de bajo nivel. Se puede utilizar para conectarse al modelo de subprocesos .NET.
Escribir() Este método le permite escribir texto directamente en el flujo de respuesta. Generalmente es mejor utilizar un modelo de control y dejar que los controles generen su propio marcado HTML. Si intenta utilizar el método Response.Write() con un modelo de control, el desarrollador pierde la capacidad de decidir dónde debe ir el texto en la página.
Sin embargo, el método Response.Write() es importante en situaciones en las que los controles que generan su propia representación HTML deben crearse desde cero.
BinaryWrite() y WriteFile() Estos métodos le permiten tomar contenido binario de una matriz de bytes o un archivo y escribirlo directamente en el flujo de respuesta. No tiene sentido usarlos junto con los controles del servidor, pero pueden ser muy útiles al crear una configuración personalizada. controlador HTTP.
Por ejemplo, puede crear un controlador HTTP que lea los datos de un documento PDF desde una entrada de la base de datos y los escriba directamente en el flujo de respuesta utilizando el método BinaryWrite(). En el lado del cliente, el resultado final se verá exactamente igual que si el usuario hubiera subido un archivo PDF estático. Al escribir contenido que no sea HTML, asegúrese de establecer la propiedad ContentType en el valor apropiado
Moverse entre páginas

Mayoría función importante La clase HttpResponse proporciona un pequeño conjunto de métodos que le permiten navegar de una página a otra. El más universal de ellos es el método Redirect(), que permite redirigir al usuario a otra página. A continuación se muestra un ejemplo de su aplicación:

// Redirigir a un archivo en el directorio actual. Respuesta.Redirect("PageFlow.aspx"); // Redirigir a otro sitio web. Respuesta.Redirect("http://www.google.com");

El método Redirect() requiere ciclo completo envío. Básicamente, envía un mensaje al navegador que hace que solicite una nueva página.

El método Redirect() tiene una sobrecarga que toma un valor booleano como segundo parámetro. Este valor especifica si el código de la página debe continuar ejecutándose. De forma predeterminada, aunque Redirect() redirige al usuario y cierra la conexión, cualquier código restante en el método se ejecutará junto con el resto de los eventos de la página. Esto permite la limpieza si es necesario. Pero si se pasa verdadero como segundo parámetro, ASP.NET dejará de procesar la página inmediatamente, lo que podría reducir carga de trabajo servidor web.

Si necesita transferir al usuario a otro formulario web dentro de la misma aplicación web, puede adoptar un enfoque más rápido utilizando el método Server.Transfer(). Sin embargo, este método tiene algunas peculiaridades. Debido a que la redirección ocurre en el lado del servidor, la URL original permanece en la ventana del navegador web del cliente. Básicamente, el navegador no tiene forma de saber que en realidad está mostrando una página diferente. Esta limitación causa problemas cuando el cliente actualiza o agrega la página a favoritos.

Además, el método Server.Transfer() no puede transferir el control a una página que no sea ASP.NET o a una página web ubicada en otra aplicación web o sitio web.

Para pasar de una página a otra, hay otra técnica disponible: la publicación entre páginas. Le permite crear una página que se envía a otra página, lo que permite pasar toda la información del estado de la vista y el contenido de cualquier control.

En ASP.NET 4, la clase HttpResponse introdujo otro método para redirigir al usuario: RedirectPermanent(). Este método hace lo mismo que Redirect(), es decir. envía un mensaje de redireccionamiento al navegador indicando que debe solicitar una nueva página. Sin embargo, en lugar del código de estado HTTP 302 (redireccionamiento temporal), utiliza el código 301 (que indica un redireccionamiento permanente). Para los navegadores web esta diferencia no importa, pero para los motores de búsqueda es muy importante. Cuando robot de búsqueda explora el sitio web y obtiene un código de estado 301, actualiza su directorio motor de búsqueda, llenándolo con información sobre la nueva URL.

Esto significa que los métodos Redirect() y RedirectPermanent() deben usarse muy de diferentes maneras. El método Redirect() debe usarse para proporcionar navegación normal y control de flujo en la aplicación (por ejemplo, cuando el usuario pasa por algún tipo de proceso de verificación), y el método RedirectPermanent() debe usarse cuando se solicita una URL antigua que fue Anteriormente era compatible pero ya no se utiliza.

Normalmente, el método Redirect() se llamará en algún lugar del código del formulario web, mientras que el método RedirectPermanent() se llamará en el código de la aplicación, más específicamente en el método Application_BeginRequest() dentro del archivo global.asax. Esto le permitirá administrar todas sus redirecciones persistentes en un solo lugar sin tener que guardar resguardos de páginas antiguas. A continuación se muestra un ejemplo:

void protegido Application_BeginRequest(remitente del objeto, EventArgs e) ( // La aplicación web ya no contiene la página about.aspx if (Reguest.FilePath == "/about.aspx") ( Response.RedirectPermanent("/about/about-Us . aspx"); ) // (Agregue redirecciones adicionales aquí.) )

Objeto de servidor

El objeto Servidor es una instancia de la clase System.Web.HttpServerUtility y proporciona una variedad de métodos y propiedades auxiliares, que se enumeran en la tabla:

Miembros de la clase HttpServerUtility Método o propiedad Descripción
Nombre de la máquina Propiedad que representa el nombre de la computadora en la que se ejecuta la página. Este es el nombre del servidor web utilizado por la computadora para identificarla ante el resto de la red.
ObtenerÚltimoError() Recupera el objeto de excepción para el error más reciente (o una referencia nula si no existe). Este error debería haber ocurrido al procesar la solicitud actual y no se manejó. Se utiliza con mayor frecuencia en un controlador de eventos de aplicación que busca situaciones de falla.
HtmlEncode() y HtmlDecode() Reemplaza una cadena normal con una cadena válida caracteres HTML(y viceversa)
UrlEncode() y UrlDecode() Reemplaza una cadena normal con una cadena de caracteres URL válidos (y viceversa)
RutaMapa() Devuelve la ruta física a un archivo correspondiente a un específico camino virtual a un archivo en el servidor web. Llamar a MapPath() con / devuelve la ruta física al directorio raíz de la aplicación web. También admite rutas que contienen el carácter de tilde (~) que representa el directorio raíz de un sitio web (por ejemplo, ~/homepage.aspx).
Transferir() Transfiere la ejecución a otra página web en la aplicación actual. Este método es similar a Response.Redirect(), pero es más rápido. No se puede utilizar para mover al usuario a un sitio ubicado en un servidor web diferente o a una página que no sea ASP.NET (como HTML o ASP).

El método Transfer() es el más de una manera rapida mover al usuario a otra página de la aplicación. Cuando se utiliza este método, no se produce un ciclo de envío completo. En cambio, el motor ASP.NET simplemente carga una nueva página y comienza a procesarla. Como resultado, la URL que se muestra en el navegador del cliente no cambia.

MapPath() es otro método útil Objeto de servidor. Por ejemplo, supongamos que desea cargar un archivo llamado info.txt desde el directorio virtual actual. En lugar de codificar la ruta, puede utilizar el método Server.MapPath() para convertir la ruta relativa a su aplicación web en una ruta física completa.

Codificación HTML y URL

La clase Servidor también contiene métodos que convierten cadenas normales en una representación que puede usarse de forma segura como parte de una URL o mostrarse en una página web. Por ejemplo, digamos que va a mostrar el siguiente texto en una página web:

Etiqueta

Se utiliza para indicar un párrafo.

Si intenta escribir esta información en una página o colocarla en un control, obtendrá lo siguiente:

Se utiliza una etiqueta para identificar un párrafo.

Texto

No aparecerá y el navegador lo interpretará como si incluyera un párrafo. Para evitar este comportamiento automático, deberá convertir valores potencialmente problemáticos en equivalentes HTML especiales. Por ejemplo,< превратится в < в окончательной HTML-странице, а браузер отобразит этот символ как @ foreach (var item in rows) { // do something }

Las expresiones o declaraciones anidadas no comienzan con el signo @...

< ul >@ foreach (var elemento en filas) ( if (item.Equals(x)) ( // hacer algo ) )

A menos que estén separados de la expresión o declaración externa por etiquetas no coincidentes

< ul >@foreach (var elemento en filas) (< li >@ if (item.Equals(x)) ( // hacer algo ) )

El signo @ se utiliza en Razor para representar el valor de variables, expresiones y declaraciones en el navegador:

@FechaHora .Ahora @(algunaCondición? x:y )

Las variables dentro de expresiones y declaraciones no deben tener el prefijo @.

Si desea representar texto sin formato o etiquetas no coincidentes mientras está dentro de un bloque de declaración, use el signo @ seguido de dos puntos para indicarle a Razor que lo que sigue no es código C#:

@ if (item == x) // texto sin formato ( @: La hora es @ DateTime .Now ) @ if (item == x) // etiquetas no coincidentes ( @:< ul >) demás ( @:< ol >) Identificadores

Un identificador en C# es el nombre dado a un espacio de nombres, clase, variable, propiedad, método, interfaz, etc. Las reglas gobiernan lo que hace que un identificador sea válido. Está permitido utilizar una palabra clave de C# como identificador, pero si lo hace, debe utilizar el signo @ para evitar errores en tiempo de compilación. Se desaconseja el uso de una palabra clave como identificador, pero hay ocasiones en las que no puede evitar hacerlo.

Algunas sobrecargas de las clases HtmlHelper (páginas web y MVC) aceptan un objeto para representar los atributos HTML que se representarán como parte de la etiqueta que representa el ayudante. La siguiente El ejemplo agrega un atributo de estilo a un entrada de texto y establece su valor en ancho: 100%; :

@Html.TextBoxFor(modelo => nuevo (estilo = "ancho:100%;" ))

Cuando haces esto, eres creando un tipo anónimo con una propiedad llamada estilo para representar los atributos HTML. Si desea configurar el clase CSS atributo a través de este método, debe agregar una propiedad al tipo anónimo llamado clase, que es una palabra clave de C#. Por lo tanto debes usar el signo @ para habilitar el uso de la clase en este caso:

@Html.TextBoxFor(modelo => modelo.FirstName, htmlAttributes: nuevo ( @class = "ancho completo"))

Un error que veo repetido con bastante frecuencia en los foros de ASP.NET es aplicar el signo @ a todas las demás propiedades del tipo anónimo, lo cual simplemente no es necesario. Algunas personas incluso piensan que el signo @ utilizado aquí es parte de las reglas de sintaxis de Razor. No lo es. Su uso aquí precedió a Razor por mucho.

Literales de cadena textuales

Un literal de cadena textual en C# consta del signo @ seguido de una cadena literal entre comillas dobles y termina con un punto y coma, p.

var s = @"Hola mundo";

Dos beneficios de usar un literal de cadena textual incluyen el hecho de que solo necesita escapar de las comillas dobles (duplicándolas); y la cadena puede abarcar varias líneas de código sin necesidad de caracteres de continuación. Por estas razones, los literales de cadena textuales son más adecuados para representar rutas (que de otro modo podrían necesitar que se escapen las barras diagonales) y patrones de expresión regular (que también pueden requerir que se escapen las barras invertidas).

Regex re = nueva expresión regular (@"\w\d(1,3)\.\d(1,3)\.\d(1,3).\d(1,3)\w" );

También son útiles para representar grandes bloques de texto si es necesario incluirlos en el código de manera legible, como declaraciones SQL que podrían usarse en aplicaciones de páginas web:

var sql = @"SELECT p.ProductName, o.UnitPrice, o.Quantity, (o.UnitPrice * o.Quantity) - (o.UnitPrice * o.Quantity * o.Discount) As TotalCost FROM OrderDetails o INNER JOIN Products p ON o.IDProducto = p.IDProducto DONDE o.IDOrderID = @0";

El uso del signo @ en este contexto una vez más no tiene nada que ver con la sintaxis de Razor.

Resumen

Si alguna vez se ha preguntado cuándo y dónde debería utilizar el signo @ en su código ASP.NET, esperamos que este artículo le haya ayudado a resolver su confusión.




Arriba