Mostrando entradas con la etiqueta Javascript. Mostrar todas las entradas
Mostrando entradas con la etiqueta Javascript. Mostrar todas las entradas

Valores Perdidos en el PostBack en ASP.NET 2.0 en TextBox cuando ReadOnly="true"

Situación:
En una pagina aspx, tenemos un Textbox con la propiedad ReadOnly="true", de manera que el textbox no se puede editar, pero queremos que su valor se envié al realizar un submit.
Como nota, debemos recordad que la propiedad "ReadOnly" es distinta de la propiedad "Enabled", ya que esta ultima, hace que el textbox no se pueda editar, y además no se tenga en cuanta al procesar el submit.
En esta situación, si realizamos cualquier cambio en el valor del textbox, mediante cualquier acción de javascript, este nuevo valor se pierde en el Postback, es decir, en la parte servidor no tenemos esta información actualizada.
  1. <asp:textbox id="TextBox1" runat="server" text="Texto" readonly="true">


Supongamos que en un momento dado se ejecuta el siguiente código javascript, que modifica en la parte cliente el valor de nuestro textbox.
  1. <script language=javascript>

  2. opener.document.Form1.textbox1.value ='Nuevo Texto';

  3. window.close();

  4. </script>


Cuando se realice un Submit de nuesta pagina, en el servidor, textbox seguirá teniendo el valor antiguo, es decir , textbox = "texto" en vez de "nuevo texto". Esto es debido a como Net 2.0 interpreta la propiedad Readonly="true".
Para solucionarlo, primero en el aspx quitamos la propiedad:
  1. <asp:textbox id="TextBox1" runat="server" text="Texto" >


Y ahora, en el load de la pagina, insertamos la propiedad "ReadOnly", con la siguiente código:

  1. textbox1.Attributes.Add("readonly", "readonly")


Si realizamos un nuevo Submit sobre la página, vemos como el textbox muestra correctamente los valores actualizados en la parte cliente entre los Postbacks.

Inyectar código javascript en un control asp .net

Situación:
Queremos inyectar un código javascript para controlar algún evento desde la parte cliente, tal como control de entrada, validación de datos, etc..., dentro de un control de servidor asp net.

Mas concretamente, queremos que se ejecute una parte de código directamente en el cliente y por otro lado se pueda ejecutar otro código de ese mismo control pero en el servidor.

Primero, en la parte aspx, introducimos la función javascript que queremos ejecutar:

  1. function validateFormat()

  2. {

  3. var txtEID = document.getElementById('txtID');

  4. ValidateEID(txtEID);
  5. ...
  6. ...

  7. }



Desde el servidor (vb), inyectamos en el control la llamada a la función javascript junto con el evento:
  1. Protected WithEvents btSearch As System.Web.UI.WebControls.Button



  1. Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

  2. If Not Page.IsPostBack Then

  3. ...

  4. ...
  5. Me.btSearch.Attributes.Add("onclick", "javascript:return validateFormat();")

  6. End If

  7. End Sub

De esta forma, primero se ejecutaría el código en la parte cliente del navegador y a continuación se lanzara el código asociado con del control desde el servidor.

Si durante la validación, en el javascript deseamos que no ese ejecute el código servidor, utilizaríamos este código :
http://tecnonotasdarthon.blogspot.com/2009/02/evitar-propagar-un-evento-con.html

Evitar propagar un evento con javascript.

Situación:
Tenemos un textbox o un input en html, en el que el usuario puede pulsar la tecla Enter. Al pulsar dicha tecla se puede lanzar un evento de perdida de foco o un submit de la pagina.

Para evitarlo, añadimos el siguiente código, que controla las pulsaciones de las teclas y controla las acciones al pulsar Enter.

  1. function keyEnter(e)

  2. {

  3. keynum=(document.all) ? e.keyCode : e.which;

  4. if (keynum == 13)

  5. {

  6. if (!e) e = window.event;

  7. if (e.preventDefault) {

  8. e.preventDefault();

  9. } else {

  10. e.returnValue = false;

  11. }


  12. if (e.stopPropagation) {

  13. e.stopPropagation();

  14. } else {

  15. e.cancelBubble = true;

  16. }

  17. }

  18. }



Por ultimo, solo nos queda añadir la llamada a la función desde el textbox:
  1. <asp:textbox id="txtID" onkeypress="keyEnter(event);" runat="server"></asp:textbox>