Herramientas de usuario

Herramientas del sitio


sp:aspnet

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
sp:aspnet [2009/08/14 20:15]
alfred
sp:aspnet [2020/05/09 09:25] (actual)
Línea 190: Línea 190:
 === GAC === === GAC ===
 Como toda aplicación en .NET, las creadas con aspnet pueden acceder a los ensamblados ubicados en la //Global Assembly Cache//​. ​ Como toda aplicación en .NET, las creadas con aspnet pueden acceder a los ensamblados ubicados en la //Global Assembly Cache//​. ​
 +
  
  
Línea 212: Línea 213:
 En el web.config podemos definir el tiempo que se mantiene la sesión activa (por defecto 20 minutos): En el web.config podemos definir el tiempo que se mantiene la sesión activa (por defecto 20 minutos):
 <code xml> <code xml>
-<sessionState +<configuration>​ 
-  timeout="​40"​ +   <​system.web>​ 
-/>+      <​sessionState ​timeout="​40"​ />
 </​code>​ </​code>​
 Si las cookies no están activas, la sesión puede ser tratada a partir de un identificador en la URL, para ello agregaremos lo siguiente al web.config: Si las cookies no están activas, la sesión puede ser tratada a partir de un identificador en la URL, para ello agregaremos lo siguiente al web.config:
Línea 349: Línea 350:
  
 ===== Algunos elementos básicos ===== ===== Algunos elementos básicos =====
 +
  
 ==== Response ==== ==== Response ====
Línea 357: Línea 359:
 </​code>​ </​code>​
  
- +=== Otros === 
- +  * ''​Clear'':​ Elimina lo que se ha escrito hasta ahora. 
- +  * ''​ContentType'':​ Indica el tipo de contenido que se envia para que según este sea tratado por el navegador.
- +
- +
- +
  
 ==== Clase Page ==== ==== Clase Page ====
Línea 490: Línea 488:
 </​code>​ </​code>​
 \\ \\ Hay que tener cuidado, porque si se genera un error mientras se maneja errores puede darse un bucle infinito. \\ \\ Hay que tener cuidado, porque si se genera un error mientras se maneja errores puede darse un bucle infinito.
 +
  
 ==== Ciclo de vida de una página ASP.NET ==== ==== Ciclo de vida de una página ASP.NET ====
Línea 525: Línea 524:
  
   * Esquema del ciclo de vida página: {{sp:​asp:​ct.png?​10|Esquema}}   * Esquema del ciclo de vida página: {{sp:​asp:​ct.png?​10|Esquema}}
 +
 +
 +
 +
 +==== Cookies ====
 +Las cookies son pequeños archivos de texto que se guardan en el ordenador del visitante de una web y que luego pueden ser recuperados. Los manejamos a partir del tipo ''​System.Web.HttpCookie''​.
 +
 +=== Crear una cookie ===
 +Para crear una cookie simplemente creamos un objeto del tipo ''​HttpCookie''​ a partir de un identificador y de un valor (en el caso siguiente el identificador es ''​subgurim''​ y el valor la fecha actual). Podremos decir cuando queremos que la cookie caduque a partir de la propiedad ''​Expires''​.
 +<code csharp>
 +HttpCookie addCookie = new HttpCookie("​subgurim",​ DateTime.Now.ToString());​
 +addCookie.Expires = DateTime.Today.AddDays(1).AddSeconds(-1);​
 +Response.Cookies.Add(addCookie);​
 +</​code>​
 +Podemos agregar la cookie de forma dinámica:
 +<code csharp>
 +Response.Cookies["​userName"​].Value = "​patrick";​
 +Response.Cookies["​userName"​].Expires = DateTime.Now.AddDays(1);​
 +</​code>​
 +
 +=== Coger las cookies del cliente ===
 +Podemos recoger una cookie concreta a partir del método ''​Request.Cookies.Get'':​
 +<code csharp>
 +HttpCookie cogeCookie = Request.Cookies.Get("​subgurim"​);​
 +</​code>​
 +También podremos cogerla a partir del identificador la lista:
 +<code csharp>
 +HttpCookie cogeCookie = Request.Cookies["​subgurim"​];​
 +</​code>​
 +Al estar en una lista podemos recorrer todas las cookies del cliente:
 +<code csharp>
 +foreach (HttpCookie cookie in Request.Cookies) {
 +  Response.Write(cookie.Name + ":"​ + cookie.Value + "<​br />"​);​
 +}
 +</​code>​
 +
 +=== Modificar y eliminar las cookies ===
 +Podemos cambiar el valor de una cookie a partir del método ''​Response.Cookies.Set'':​
 +<code csharp>
 +HttpCookie modificaCookie = Request.Cookies.Get("​subgurim"​);​
 +modificaCookie.Expires = DateTime.Now.AddDays(7);​
 +modificaCookie.Value = "​hi!";​
 +Response.Cookies.Set(modificaCookie);​
 +</​code>​
 +O eliminarlas a partir del ''​Response.Cookies.Remove'':​
 +<code csharp>
 +Response.Cookies.Remove("​subgurim"​);​
 +</​code>​
 +O eliminarlas todas:
 +<code csharp>
 +Response.Cookies.Clear();​
 +</​code>​
 +Aunque si existen problemas para la eliminación:​
 +<code csharp>
 +HttpCookie c1 = Request.Cookies["​userName"​];​
 +if (c1 != null)
 +{
 +    Request.Cookies.Remove("​userName"​);​
 +    c1.Expires = DateTime.Now.AddDays(-10);​
 +    c1.Value = null;
 +    Response.SetCookie(c1);​
 +}
 +</​code>​
 +=== Cookies con varios valores ===
 +Para crear una cookie con varios valores lo haremos como si fuese un array multidimensional. \\ 
 +Para asignarla lo haremos así...
 +<code csharp>
 +Response.Cookies["​userInfo"​]["​userName"​] = "​patrick";​
 +Response.Cookies["​userInfo"​]["​lastVisit"​] = DateTime.Now.ToString();​
 +Response.Cookies["​userInfo"​].Expires = DateTime.Now.AddDays(1);​
 +</​code>​
 +O así:
 +<code csharp>
 +HttpCookie addMultiCookie = new HttpCookie("​subgurimMultidimensional"​);​
 +for (int i = 0; i < 10; i++) {
 +  addMultiCookie.Values.Add(i.ToString(),​ "​Elemento " + i.ToString());​
 +  addMultiCookie[i.ToString()] = "​Elemento " + i.ToString();​
 +}
 +Response.Cookies.Add(addMultiCookie);​
 +</​code>​
 +Y para recogerla de la siguiente forma:
 +<code csharp>
 +HttpCookie cogeMultiCookie = Request.Cookies.Get("​subgurimMultidimensional"​); ​  
 +string valorCualquiera = cogeMultiCookie.Values.Get("​5"​);​
 +</​code>​
  
 ===== La interface de usuario ===== ===== La interface de usuario =====
 +
  
  
Línea 606: Línea 691:
 } }
 </​code>​ </​code>​
 +Pero lo más aconsejable,​ si utilizamos hojas de estilos (css) es anidar los estilos de la siguiente forma: 
 +<code css> 
 +table.taula { ... } 
 +table.taula td { ... } 
 +table.taula th  { ... } 
 +table.taula tr.evenCell ​ { ... } 
 +table.taula tr.oddCell { ... } 
 +table.taula td.evenCell { ... } 
 +table.taula td.oddCell { ... } 
 +table.taula td.littleEvenCell { ... } 
 +table.taula td.littleOddCell { ... } 
 +</​code>​
  
 También podemos definir los estilos a partir de código: También podemos definir los estilos a partir de código:
Línea 684: Línea 780:
       Label.skin       Label.skin
 </​code>​ </​code>​
 +
 +
 +
  
  
Línea 732: Línea 831:
   * Utilizar URL relativas de aplicación,​ donde ''​~''​ corresponde a la raíz de esta, algo así: ''<​asp:​Image ImageUrl="​~/​images/​banner.gif"​ runat="​server"​ />''​.   * Utilizar URL relativas de aplicación,​ donde ''​~''​ corresponde a la raíz de esta, algo así: ''<​asp:​Image ImageUrl="​~/​images/​banner.gif"​ runat="​server"​ />''​.
  
-La directiva ''​MasterType'' ​especifica la ruta de la página maestra:+Las Master Pages también pueden contener otras Master Pages, por ejemplo, podríamos tener una Master Page que represente la cabecera/​pie de página y la navegación global del sitio, y después Master Pages separadas que deriven de esta para definir los aspectos de las diferentes sub-secciones del sitio.  
 + 
 +=== Comunicación entre la MasterPage y el contenido === 
 +Cuando utilizamos la directiva ''​MasterType'' ​en un WebForm estamos especificando el tipo del que será la página maestra. Esto significa que al acceder a la propiedad ''​Master''​ de la ''​Page''​ tendremos también acceso a sus propiedades. Si utilizamos MasterPages anidadas no podremos acceder a los datos de la raíz desde el WebForm, pero como lo que realmente estamos indicando es el tipo podemos hacer que las MasterPages hereden de un tipo concreto y en la directiva ''​MasterType''​ indicar ese.
 <​code>​ <​code>​
 <%@ MasterType VirtualPath="​Site.master"​ %> <%@ MasterType VirtualPath="​Site.master"​ %>
Línea 742: Línea 844:
 AdRotator ad = (AdRotator)Master.FindControl("​MyAdRotator"​);​ AdRotator ad = (AdRotator)Master.FindControl("​MyAdRotator"​);​
 </​code>​ </​code>​
 +Para comunicar desde la MasterPage al contenido lo que haremos será lanzar un evento.
  
-Las Master Pages también pueden contener otras Master Pages, ​por ejemplopodríamos tener una Master ​Page que represente ​la cabecera/​pie de página y la navegación global ​del sitio, y después Master Pages separadas que deriven ​de esta para definir los aspectos de las diferentes sub-secciones del sitio. ​ +=== Notas === 
- +  * La MasterPage inserta la el WebForm entre los eventos ''​PreInit''​ e ''​Init''​.  
- +  * Podemos indicar la MasterPage ​por códigopero antes del evento ''​PreInit''​ mediante la propiedad ''​MasterPageFile''​ del objeto ​Page
- +  * Podemos indicar ​la MasterPage por defecto a partir ​del fichero ​de configuración:​ 
- +<code xml> 
 +<​configuration>​ 
 +  <​system.Web>​ 
 +    <​pages master="​otc.master"​ /> 
 +  </​system.Web>​ 
 +</​configuration>​ 
 +</​code>​
  
 ===== Seguridad ===== ===== Seguridad =====
Línea 757: Línea 865:
  
 ===== WebServices ===== ===== WebServices =====
 +
 +
 +
  
  
Línea 796: Línea 907:
 } }
 </​code>​ </​code>​
 +  * En el ''​HttpContext''​ podemos recoger los parámetros mediante la ''​QueryString''​ (GET) o el ''​Form''​ (POST). ​
 +  * Si el controlador necesita leer la sesión del usuario que hace la petición necesitará implementar la interfaz ''​System.Web.SessionState.IReadOnlySessionState'',​ si además necesitase guardarla implementaría la ''​IRequiresSessionState''​.
  
 ===== Notas ===== ===== Notas =====
 +
 +
 ==== Como... ==== ==== Como... ====
 === Agregar una librería === === Agregar una librería ===
Línea 807: Línea 922:
 <code xml> <code xml>
 <​scs:​ScsComboBox ID="​dest"​ runat="​server"​ EnableDefaultItem="​false"​ Width="​100px"/>​ <​scs:​ScsComboBox ID="​dest"​ runat="​server"​ EnableDefaultItem="​false"​ Width="​100px"/>​
 +</​code>​
 +=== Saber ubicación de la aplicación en disco ===
 +Como lo hacemos en cualquier aplicación .NET simplemente tendríamos que consultar:
 +<code csharp>
 +string bdir = System.AppDomain.CurrentDomain.BaseDirectory;​
 +</​code>​
 +=== Acceder al Request\Response sin tener acceso a la clase Page ===
 +<code csharp>
 +HttpContext.Current.Request.MapPath("​~/"​);​
 </​code>​ </​code>​
  
sp/aspnet.1250280909.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)