Posteado por: toniogago | 18 noviembre 2009

Request.Form con páginas maestras (master pages)


Con las Master Pages, los controles de los formularios que se utilizan para enviar datos entre páginas cambian de ID. Según el número de páginas anidadas puede variar y no siempre es el mismo texto el que se le añade. Normalmente es Ctl00$ContentPlaceHolderID$ por cada página maestra.

En vez de utilizar Request.form(“ID”) tendremos que utilizar alguna forma para reconocer el control que queremos utilizar. Sabiendo que ASP.NET utiliza el simbolo del dólar para generar el ID del control, crearemos un bucle para ir recorriendo la clase Request.form y preguntar por la clave del control.

Cuando empezé a pensar en cómo hacerlo, tenían en mente la función InStr de Visual Basic que devuelve el índice dentro de una cadena del texto buscado (Instr(texto, "$)). La función equivalente en .Net es IndexOf y el bucle sería:

'Primero recorre la Request.Form
Dim i as Integer, sCadena as String
For i = 0 to Request.Form.Count - 1
  sCadena = Request.Form.Keys(i)
  Do
    If sCadena.IndexOf("$") > 0 Then
      sCadena = sCadena.Substring(sCadena.IndexOf("$") + 1, Len(sCadena) - sCadena.IndexOf("$") - 1)
    End If
  Loop While sCadena.IndexOf("$") > 0
  'Ahora tenemos en sCadena el ID del control tal cual lo necesitamos 
  'Suponiendo que enviamos 2 controles: ARTI y CLIE que contienen
  'el código de artículo y el nombre del cliente.
  Dim Articulo as String, Cliente as String
  select case sCadena.ToUpper
    case "ARTI"
       Articulo = Request.Form(i)
    case "CLIE"
       Cliente = Request.Form(i)
  End Select
Next

Dándole una vuelta en la cabeza, pensé que con ASP.Net no debería de ser tan rebuscado. No sé si habrá otra solución más simple. Yo lo único que logré fué evitar el bucle do loop con lo siguiente:

Dim Cadena() as string = Request.Form.Keys(i).Split("$")
'En el último elemento del Array tengo lo que necesito.
sCadena = Cadena(Ubound(Cadena))

Espero que os sirva.

un saludo.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Categorías

A %d blogueros les gusta esto: