954,580 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

TextBox.Text changed with js don't keep value on postback

Hi,

I have a website on NET 2.0, there I have a textbox and after I change the text on it with a js function, try to save on the DB (I have to click on a imagebutton to save it), but on the postback the textbox.text property has the previous value.

I need some guidance on how to resolve this.

Here's my code:

JS inserted with a RegisterClientScriptBlock method: <-- This works fine

<script type="text/JavaScript"> 
function Calcular() {
if (!(isNaN(parseFloat(document.getElementById('ctl00_cphVentanillaAtencionMaster_txtdcPagSaldoPrevioPago').value)) && isNaN(parseFloat(document.getElementById('ctl00_cphVentanillaAtencionMaster_txtdcPagPagoActual').value)))) {
document.getElementById('ctl00_cphVentanillaAtencionMaster_txtdcSaldoPostPago').value = parseFloat(document.getElementById('ctl00_cphVentanillaAtencionMaster_txtdcPagSaldoPrevioPago').value) - parseFloat(document.getElementById('ctl00_cphVentanillaAtencionMaster_txtdcPagPagoActual').value);
} else {
document.getElementById('ctl00_cphVentanillaAtencionMaster_txtdcSaldoPostPago').value = '0.0';}
}
function ActualizaMonto() {
if (!(isNaN(parseFloat(document.getElementById('ctl00_cphVentanillaAtencionMaster_txtdcPagSaldoPrevioPago').value)) && isNaN(parseFloat(document.getElementById('ctl00_cphVentanillaAtencionMaster_txtdcPagPagoActual').value)))) {
document.getElementById('ctl00_cphVentanillaAtencionMaster_txtdcPagSaldoPrevioPago').value = parseFloat(document.getElementById('ctl00_cphVentanillaAtencionMaster_txtdcPagMontoTotal').value);
} else {
document.getElementById('ctl00_cphVentanillaAtencionMaster_txtdcPagMontoTotal').value = '0.0';}
}
</script>


on PostBack I try to do this:

oPagosBE.btPagActivo = True

oPagosBE.dcPagMontoTotal = Me.txtdcPagMontoTotal.Text
oPagosBE.dcPagPagoActual = Me.txtdcPagPagoActual.Text
oPagosBE.dcPagSaldoPrevioPago = Me.txtdcPagSaldoPrevioPago.Text   <--- THIS VALUE POSTBACKS WITH THE INITIAL VALUE (BEFORE JS)
oPagosBE.dtPagFechaRegistro = IIf(IsDate(Me.txtdtPagFechaRegistro.Text.Trim), Me.txtdtPagFechaRegistro.Text.Trim, #1/1/1900#)
oPagosBE.vcPagUsuarioRegistrante = Session.Item("vcUsuCodigo")
          
bExito = bPagosBL.Insertar(oPagosBE)


Thanks

culebrin
Junior Poster in Training
62 posts since Aug 2007
Reputation Points: 10
Solved Threads: 1
 

I once had a similar challenge. The TextBox is not aware of the change you made because it is a server control and the change was not made on the server but on the client side.I Corrected the situation by changing my control to an html control. I hope this help.

ema005
Newbie Poster
24 posts since Jan 2006
Reputation Points: 10
Solved Threads: 4
 

It can be done,

Please use this form,

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
<script type="text/javascript">
function setval() {
    themsg = document.getElementById("<%=txtMessage.ClientID%>");
    themsg.value="Hello World!";
}
</script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:TextBox ID="txtMessage" runat="server" Text=""></asp:TextBox>
        <asp:Button ID="btnSeeMessage" runat="server" Text="see" onclick="SeeMessage" />
    </form>
    <input id="cID" onclick="setval();" type="button" value="Set from client" />
</body>
</html>

From server side,

protected void SeeMessage(object sender, EventArgs e)
    {
        Response.Write(txtMessage.Text);
    }


Please use <%=ServerControlName.ClientID%> everytime you wanna access a server control from client side.

ebookfinder
Newbie Poster
19 posts since Jul 2007
Reputation Points: 10
Solved Threads: 2
 

I used the "Control.ClientID" to reference my control, but no luck...

and I can't use a client side control, because I need to access it in the server also...

I gave up, I know there's a solution out there, but I have no time... I'm on a schedule... Thanks a lot!! to all of you... !!

It can be done,

Please use this form,

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
<script type="text/javascript">
function setval() {
    themsg = document.getElementById("<%=txtMessage.ClientID%>");
    themsg.value="Hello World!";
}
</script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:TextBox ID="txtMessage" runat="server" Text=""></asp:TextBox>
        <asp:Button ID="btnSeeMessage" runat="server" Text="see" onclick="SeeMessage" />
    </form>
    <input id="cID" onclick="setval();" type="button" value="Set from client" />
</body>
</html>

From server side,

protected void SeeMessage(object sender, EventArgs e)
    {
        Response.Write(txtMessage.Text);
    }

Please use <%=ServerControlName.ClientID%> everytime you wanna access a server control from client side.

culebrin
Junior Poster in Training
62 posts since Aug 2007
Reputation Points: 10
Solved Threads: 1
 

Anyone with a solution? Working on this for 3 days and dont know what to do.

aliensXY
Newbie Poster
11 posts since Jul 2009
Reputation Points: 10
Solved Threads: 0
 

Are you setting the initial value of the textbox during the page load?

mikev2
Newbie Poster
24 posts since Oct 2009
Reputation Points: 12
Solved Threads: 7
 

Textbox is a server control,it loses value changed from javascript on postback.if u want to save the value,u can use hidden control which you can access in both client as well as server side.Please mark as answer if this works.

ja3_bhende
Newbie Poster
6 posts since Feb 2010
Reputation Points: 10
Solved Threads: 0
 

This question has already been solved

Post: Markdown Syntax: Formatting Help
You