Chalalo Land

Tecnologías ASP.NET y un poco Más

Contacto


 Si quierer cooperar, yo feliz, muy agradecido :)

De donde me Visitan?

Locations of visitors to this page

Generic Content

Si te gustaron los articulos, y te animas te estaría muy agradecido!


Recent Posts

Tags

Community

Blogs de MVP

Amigos Geeks

Blogs Imperdibles

GODS

Archives

Email Notifications

Algunas funciones útiles en nuestras MasterPages

 

El Título no nos dice mucho, pero recorriendo la web constantemente buscando datos útiles que nos sirvan para el desarrollo de nuestras páginas, siempre que nos hagan la vida un poco más sencilla.

Veamos algunas funciones que podemos dejar en nuestras MasterPages (ya poco me imagino el mundo sin esta gran característica) o si no ocupas MP o puedes dejarla una clase base que herede de la clases WebForm.

Setear el Título de la Página

Muchas veces se nos olvida setear el título de una página, la idea es que esto no pase, ya que el usuario va a ver “Untitled Page” en la barra de tareas, y se ve bien poco profesional. De hecho , me ha pasado varias veces que olvido este importante atributo, no querrás ser parte de las casi 43 Millones de páginas que están sin título! No me crees? mira esto:

http://search.live.com/results.aspx?q=untitled+page&form=QBLH

image

Entonces veamos una manera de solucionar esto, (como siempre digo, seguramente hay maneras más completas, pero lo que quiero mostrar es una idea).

Primero, agregamos unas entradas a nuestro Web.Config

<appSettings>
    <add key="NombreTitulo" value="Titulo1"/>
    <add key="Titulo1" value="Titulo Personalidado 1"/>
    <add key="Titulo2" value="Titulo Personalidado 2"/>
</appSettings>

Entonces, tenemos la key que me entrega el nombre de la key en donde tengo el título, hago esto para no tener modificar un código de la aplicación si es que necesito cambiar de títulos rápidamente(sin compilar)

Luego, en mi MasterPage, escribo el siguiente código:

Partial Class MasterPage
Inherits System.Web.UI.MasterPage


Private Sub SeteaTitulo() Handles Me.Load
If (String.IsNullOrEmpty(Page.Title) OrElse _
  String.Compare(Page.Title, "Untitled Page", True) = 0 OrElse _  
  String
.Compare(Page.Title, "Sin titulo", True) = 0) Then
            Me.Page.Title = ObtieneTitulo()
End If
End Sub

Private Function ObtieneTitulo() As String
Dim NombreClave As String = _
  ConfigurationManager.AppSettings("NombreTitulo")
  Return ConfigurationManager.AppSettings(NombreClave)
End Function
End Class

Como se ve en el código, se crear una funcion que obtiene el nombre del la clave que contendrá el título de la página, la cual se llama desde SeteaTitulo(), que es manejado por el Load de la página, se hacen las comparaciones de rigor, y, si no hay titulo seteado, lo obtenemos desde ObtieneTitulo().

…y presto!

image

Ventanas Emergentes
Una de las funcionalidades que muchas veces nos “acostumbramos” a perder en ASP.NET son las ventanas emergentes de Javascript, ya que empezamos a programar todo del lado del servidor, son las ventanas emergentes de Javascript, (y para los más nuevos, msgbox en .net les va a funcionar en tiempo de desarrollo en el servidor de prueba, en el servidor de explotación, no)

Bueno, volvamos, entonces vamos a tener que insertar código javascript en nuestra página, para eso vamos a utilizar el método RegisterStartupScript. Y crearemos dos tipos de mensajes, el normal con JavasCript y otro un poco más Cool (el Script lo obtuve y modifiqué de la página:http://jdstiles.com/java/jsalert.html gracias Jim!)

image

Los resultados que tendremos serán:

 

Resultado al presionar el Boton Alert Normal

Resultado al Presionar el Boton Alert Cool

image

image

El código en la MasterPage para Alert Normal

  Public Sub MostrarVentana(ByVal texto As String, ByVal clientScript As ClientScriptManager)

   Dim csname1 As String = "PopupScript"
   Dim csname2 As String = "MessageScript"
   Dim cs As ClientScriptManager = clientScript
   If (Not cs.IsStartupScriptRegistered(Me.GetType, csname1)) Then
   
Dim cstext1 As String = String.Format("alert('{0}');", texto)
    cs.RegisterStartupScript(Me.GetType,csname1,cstext1.ToString, True)
   End If
End Sub

En donde lo que estamos haciendo es incrustar un javascript mediante en la página, si te das cuenta, primero revisamos que no esté la clave ya en la página.

A Continuación el código del Alert Cool, que más que nada, llama a un Javacript que genera en un div, el formato para crear la forma de una ventana de Alerta.

Public Sub MostrarVentanaCool(ByVal titulo As String, ByVal texto As String, ByVal clientScript As ClientScriptManager)

Dim csname1 As String = "PopupScript"
Dim csname2 As String = "MessageScript"
Dim cs As ClientScriptManager = clientScript
If (Not cs.IsStartupScriptRegistered(Me.GetType, csname1)) Then
       Dim cstext1 As String = String.Format("makeAlert('{0}','{1}');", titulo, texto)
 
cs.RegisterStartupScript(Me.GetType, csname1, cstext1.ToString, True)
 
End If
End Sub

En las dos funciones pasamos como parámetro el ClientScript , recordemos que estamos en la MasterPage y estas funciones van a ser llamadas desde sus Páginas Hijas ( así nos ahorramos el problema de la propiedad clientScript de la MasterPage).

A continuación agregamos en el código declarativo (dentro del Body) de la MasterPage, las siguientes lineas de código, que nos permitirán la funcionalidad de la Cool.

<div id="alertLayer" class="alertBoxStyle"></div>
<link href="StyleSheet.css" rel="stylesheet" type="text/css" />
<script src="Mensaje.js" type="text/javascript"></script>

Ahora en las Páginas hijas de esta MP, vamos a instanciar la MasterPage:

Dim mp As New MasterPage

Y luego las llamadas a los métodos correspondientes según el alert que quieras mostrar:

mp.MostrarVentana("Mi Mensaje", Page.ClientScript)

ó

mp.MostrarVentanaCool("Titulo de la Ventana", _
                      "El Mensaje al usuario", _
                      Page.ClientScript)

Ahora todas las ventanas hijas tienen esta funcionalidad :D

Te Adjunto el Proyecto de Ejemplo para que veas el CSS y JS de la ventana Cool :)
Descárgalo Aquí

Espero que te sirva,
Gonzalo

Posted: 14/4/2009 23:45 por Gonzalo Perez | con 8 comment(s) |
Archivado en: ,,
Comparte este post:

Comentarios

Julio Trujillo Leon ha opinado:

Muy bueno, fácil, útil potente e interesante!!!!!

# April 15, 2009 9:45 AM

José A. Fernández ha opinado:

@Gonzalo

Agrego un post que lo tenia que tiene un ejemplo para hacer una clase base para la MasterPage, en este caso para algo especifico pero tambien vale para agregar las funcionalidades que comentas

geeks.ms/.../detectar-nueva-session-y-obligar-al-usuario-a-logearse-nuevamente.aspx

Saludos

# April 16, 2009 1:33 AM

MVP Factor ha opinado:

Nuestro buen amigo Gonzalo Perez a creado un excelente artículo sobre MasterPages, aquí el detalle: “

# April 16, 2009 7:34 PM

Gonzalo Perez ha opinado:

José,

Si!, esta rebuena la función, muchas gracias por el aviso :D

# April 17, 2009 2:43 PM

Pilar ha opinado:

Muy bueno!!

Eres un genio. MUCHAS GRACIAS

# April 20, 2010 1:44 PM

Pilar ha opinado:

Eres un genio

Muchas gracias

# April 20, 2010 1:46 PM

Francisco Ibarra ha opinado:

Tengo un problema con las master page estoy usando datagridview y al correr la pagina y hacer clic en el renglon de ASPxGridView10 si entra al evento ASPxGridView10_FocusedRowChanged pero no me refleja nada en los textbox ni me habilita los botones ni refresca con el databind() del segundo grid Podria alguien ayudarme?

Protected Sub ASPxGridView10_FocusedRowChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ASPxGridView10.FocusedRowChanged

       If ASPxGridView10.FocusedRowIndex <> -1 Then

           'MsgBox(ASPxGridView10.GetDataRow(ASPxGridView10.FocusedRowIndex).Item("IdTipoEstatus"))

           txtClaveTipo.Text = ASPxGridView10.GetDataRow(ASPxGridView10.FocusedRowIndex).Item("IdTipoEstatus")

           txtDescripcion.Text = ASPxGridView10.GetDataRow(ASPxGridView10.FocusedRowIndex).Item("DesTipoEstatus")

           ddlModulo.SelectedIndex() = ASPxGridView10.GetDataRow(ASPxGridView10.FocusedRowIndex).Item("IdModulo")

           btnModificar.Enabled = True

           btnQuitar.Enabled = True

           ASPxGridView2.DataBind()

       End If

   End Sub

# May 26, 2010 8:14 PM