Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Controles HTML en el Code Behind

117 views
Skip to first unread message

Pablo Guevara

unread,
Jun 18, 2004, 2:06:14 PM6/18/04
to
Como puedo recuperar el valor de un control HTML desde el code behind
 

<input type=text ID="TxtMail"  value=''/>
 
Gracias por su ayuda.
 
Slds.
 
Pablo
 
+++
 

Sashka

unread,
Jun 18, 2004, 2:30:01 PM6/18/04
to
<input type=text ID="TxtMail" runat="server"  value=''/>
 
Sashka
MS MVP Access
"Pablo Guevara" <PGM...@Hotmail.QUITARESTO.com> escribió en el mensaje news:%23rVDY7V...@TK2MSFTNGP11.phx.gbl...

=?iso-8859-1?Q?Guillermo_Gonz=E1lez_A. ?= -arroba-

unread,
Jun 18, 2004, 2:37:56 PM6/18/04
to
Y adicional a lo que dice Sashka ...
 
Lo referencias con
 
protected System.Web.UI.HtmlControls.HtmlInputText TxtMail;
 
Nos vemos ...
 

Guillermo González Arroyave [Guille!.Net] :: Medellín :: Colombia

Pablo Guevara

unread,
Jun 18, 2004, 2:53:14 PM6/18/04
to
Guille,
 
Muchas gracias, pero aun no he podido solucionarlo:
 
 
Shaska y pablo: no lo declaro como control del servidor porque necesito almacenar un valor desde una funcion de javascript (ver
mensaje: Ventana de Ayuda Contextual).
 
A continuacion el codigo donde referencio al control (Que esta dentro de un dataGrid...). 

private

void MyDataGrid2_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)

{

string

MyCadena="";

CheckBox cb;

ListBox LBox;

System.Web.UI.HtmlControls.HtmlInputText txtm;

txtm = ( System.Web.UI.HtmlControls.HtmlInputText) e.Item.FindControl("TxtMail");

LBox = (ListBox)e.Item.FindControl("Lista_Comercial");

cb = (CheckBox)e.Item.FindControl("ChkFax2");

if (txtm.Value!="")

{

MyCadena += "Mail_Envio = '" + txtm.Value + "', ";

}

else

{

MyCadena += "Mail_Envio = '', ";

}

}

Slds.

 

Pablo

 

+++

"Guillermo González A." <gugonzar(-arroba-)epm.net.co> escribió en el mensaje news:OhzfhNWV...@TK2MSFTNGP09.phx.gbl...

Pablo Guevara

unread,
Jun 18, 2004, 2:58:25 PM6/18/04
to
El error que me muestra es:
 
 Server Error in '/MyDatagrid2' Application.

Object reference not set to an instance of an object.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:

Line 212:				
Line 213:
Line 214:			if (txtm.Value!="")
Line 215:			{
Line 216:				MyCadena += "Mail_Envio = '" + txtm.Value + "', ";

Source File: c:\inetpub\wwwroot\mydatagrid2\webform1.aspx.cs    Line: 214
 
Slds.
 
Pablo
 
+++
"Pablo Guevara" <PGM...@Hotmail.QUITARESTO.com> escribió en el mensaje news:uC62sVWV...@TK2MSFTNGP11.phx.gbl...

Sashka

unread,
Jun 18, 2004, 4:03:43 PM6/18/04
to
Pablo el que lo declares como control de servidor no quita que puedas acceder a él desde el cliente....  PRUEBALO!!
 
Sashka
MS MVP Access
"Pablo Guevara" <PGM...@Hotmail.QUITARESTO.com> escribió en el mensaje news:uC62sVWV...@TK2MSFTNGP11.phx.gbl...

Pablo Guevara

unread,
Jun 18, 2004, 4:31:00 PM6/18/04
to
Shaska,  ya lo probe y nada.
 
la situacion es la siguiente:
 
Debo hacer una ventana tipo ayuda contextual, que sea llamada por una pagina y devuelva un valor. 
 
Por ejemplo, estoy posicionado en un DataGrid que tiene un campo para ingresar el codigo del cliente,al pulsar sobre un boton se llama a la ventana donde aparecen los nombres de los clientes, selecciono uno y al pulsar sobre un boton, esta ventana se cierra y el campo de la pagina principal toma el valor del codigo del cliente. 
 
mira en el javascript de la ventana contextual lo llamo asi :
 
window.opener.document.getElementById('TxtMail').value='1111'

y me dice que ese control no existe.

a continuacion el codigo de llamada y el javascript

<asp:datagrid id="MyDataGrid2" runat="server" Width="100%" Font-Size="X-Small" DataKeyField="IdConocimiento" AutoGenerateColumns="False" CellPadding="4" BackColor="White" BorderWidth="1px" BorderStyle="None" BorderColor="#CC9966" Height="228px" OnItemDataBound="ItemDataBound" AllowPaging="True" PageSize="20" PagerStyle-Position="Bottom">
        <SelectedItemStyle Font-Bold="True" ForeColor="#663399" BackColor="#FFCC66"></SelectedItemStyle>
        <ItemStyle Font-Size="XX-Small" ForeColor="#330099" BackColor="White"></ItemStyle>
        <HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle>
        <FooterStyle ForeColor="#330099" BackColor="#FFFFCC"></FooterStyle>
        <Columns>
         <asp:TemplateColumn HeaderText="Mail de Envio">
          <ItemTemplate>
           <asp:Label Runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "Mail_Envio")%>' />
          </ItemTemplate>
          <EditItemTemplate>
           <input type=text ID="TxtMail"  value='<%#DataBinder.Eval(Container.DataItem, "Mail_Envio")%>'/>


<input type="text"  id="Mycliente" size="3"> <input type="button" onclick="javascript:window.open('Consulta.aspx', 'newWindow', 'scrollbars=No,status=no,toolbar=no,width=400,height=480');" />


          </EditItemTemplate>
         </asp:TemplateColumn>
         <asp:EditCommandColumn ButtonType="PushButton" UpdateText="Actualizar" CancelText="Cancelar" EditText="Editar" />
        </Columns>
        <PagerStyle HorizontalAlign="Center" ForeColor="#330099" BackColor="#FFFFCC" Mode="NumericPages"></PagerStyle>
       </asp:datagrid>

 

esta es la funcion en javascript de la ventana de ayuda :

function retornar()

{

window.opener.document.getElementById('Mycliente').value= 

this.ListBox1.SelectedItem.Value;

window.opener.document.getElementById('TxtMail').value=

this.ListBox1.SelectedItem.Value;

}

Gracias

Pablo

+++

 

Sashka

unread,
Jun 19, 2004, 5:16:34 PM6/19/04
to
Veamos ... aca hay 2 cosas...
 
La primera es que window.opener.document es nulo desde la ventana... no he encontrado documentación al respecto... pero imagino que es un asunto de seguridad, si lo piensas bien... cualquiera desde un htm cualquiera, podría modificar los datos de tu grilla si esto fuera posible....
Entonces resulta que no puedes escribir en el control con window.opener.document.getElementById('TxtMail').value (no es que no encuentre el control... es que no está disponible window.opener.document )....
 
Lo segundo es que tienes razón... no puede ser un control de servidor porque si lo fuera, tampoco puedes accesar a el desde el cliente en la misma página.... resulta que si miras el codigo fuente... suponiendo que has declarado el template asi:
<EditItemTemplate>
  <asp:TextBox ID="TxtMail1" Text='<%#DataBinder.Eval(Container.DataItem, "Mail_Envio")%>'/>
... etc...
 
Verás que el id del control viene a ser algo como id="MyDataGrid2__ctl7_TxtMail", con lo que no puedes saber exactamente como se llama...
 
Por otro lado declarandolo como <input type=text ID="TxtMail" , no funciona el value (DataBinder.Eval)... aunque me imagino que no importa mucho pues lo estás reemplazando con el valor seleccionado en la ventana...
 
Conclusión:
Puedes recuperar el valor si en botón llamas a una función... llamemosla run()...
< input type="button" onclick="javascript:run();" />
 
Y ésta función llama a otra que abre la ventana en modo dialogo... asi:
 
 function OpenPopUp(){
return showModalDialog('Consulta.aspx', 'newWindow', 'scrollbars=No,status=no,toolbar=no,width=400,height=480') }
 
function run(){
document.forms[0].TxtMail.value=OpenPopUp(); }
 
Y en el códogo del botón de la ventana... una función asi:
 
 function cierra() {
returnValue = '11111'; self.close(); }
 
Si necesitas que el retuns value, devuelva varios valores... pues los separas por comas y con split obtienes cada uno...
 
Espero haberte ayudado..
 
Sashka
MS MVP Access
 
 
 
"Pablo Guevara" <PGM...@Hotmail.QUITARESTO.com> escribió en el mensaje news:eCxLCNXV...@tk2msftngp13.phx.gbl...

Pablo Guevara

unread,
Jun 22, 2004, 9:34:35 AM6/22/04
to
Sashka,
 
Ya lo solucione, de una forma poca ortodoxa pero funciona:
 
Efectivamente en la ventana padre el nombre del control dentro del Datagrid cambia porque el sistema le antepone un prefijo(MyDataGrid2__ctl7_), donde el ctl depende de la fila donde se encuentre posicionado.  Lo que hice fue hace una busqueda en el formulario (javascript) para saber como se habia renombrado el control.  luego lo envio como parametro a la pagina de consulta y alli cambio el valor a el control que tenga el ID del parametro enviado.
 
 
***Funcion que identifica el control***
 
function MyBusqueda()
  {
  
   //re = new RegExp(':' + aspCheckBoxID + '$');  //generated control name starts with a colon
   var mycadena = "BB=0";
   for(i = 0; i < document.forms[0].elements.length; i++)
    { elm = document.forms[0].elements[i];
    if (elm.id.indexOf("TxtMail")!=-1)
      mycadena += "&ID1=" + elm.id;
      //TxtCliente
      
    if (elm.id.indexOf("TxtFax")!=-1)
      mycadena += "&ID2=" + elm.id;
      
    if (elm.id.indexOf("TxtCliente")!=-1)
     mycadena += "&ID3=" + elm.id;  
     
    if (elm.id.indexOf("Lista_Comercial")!=-1)
     mycadena += "&ID4=" + elm.id;  
    }
    alert(mycadena);
    javascript:window.open('Consulta.aspx?'+ mycadena , 'newWindow', 'scrollbars=No,status=no,toolbar=no,width=400,height=480');
  }
 
***Funcion que asigna los valores ****
 
 

string

script = @"<script>

function retornar()

{

window.opener.document.getElementById('" + Request.QueryString["ID1"].ToString() + @"').value='" +

this.TextBox2.Text + @"';

window.opener.document.getElementById('" + Request.QueryString["ID2"].ToString() + @"').value='" +

this.TextBox3.Text + @"';

window.opener.document.getElementById('" + Request.QueryString["ID3"].ToString() + @"').value='" +

this.ListBox1.SelectedItem.Value + @"';

window.opener.document.getElementById('" + Request.QueryString["ID4"].ToString() + @"').value='" +

this.TextBox4.Text + @"';

window.opener.document.getElementById('" + Request.QueryString["ID4"].ToString() + @"').text='" +

this.TextBox5.Text + @"';

window.close();}</script>";

this.RegisterClientScriptBlock("retornar", script);

}

Aunque tienes razon y podria haber usado split. 
 
Muchas gracias.
 
Slds.
 
Pablo
 
+++
 

Sashka

unread,
Jun 22, 2004, 10:29:38 AM6/22/04
to
:)) El hecho es que funciona.. si hay una forma más elegante de hacrlo... quizá alguien nos lo diga..
 
Sashka
MS MVP Access
 
 
"Pablo Guevara" <PGM...@Hotmail.QUITARESTO.com> escribió en el mensaje news:eZakT3FW...@TK2MSFTNGP09.phx.gbl...

Javier Guillen

unread,
Jun 26, 2004, 3:06:34 AM6/26/04
to
en el code behind tienes una propiedad que esta expuesta por todos los controles declarados en la pagina, es simplemente el 'ClientID'.

si usas tu control con un 'runat=server', puedes acceder al nombre utilizado por el browser de esta forma.

ejemplo:


Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox
Dim BrowserControlID = TextBox1.ClientID
si necesitas insertar el codigo javascript para que el window.opener retomer el valor de ese control, puedes usar RegisterClientScriptBlock en el code behind, pasando tu ClientID, de tal forma que el javascript en el cliente retome este valor.

 
0 new messages