Tengo una serie de cuadros de texto en un formulario. Cuando el usuario inserta números en estos cuadros de texto, se realizan los cálculos y <asp:Label> controles son actualizados a través de JavaScript para reflejar estos cálculos:

document.getElementById('<%=TotalLoans.ClientID %>').innerHTML = TotalLoans;

Este correctamente las actualizaciones de la interfaz de usuario. Sin embargo, cuando intento acceder a el valor en el código subyacente, la Text propiedad está vacía. Esto tiene sentido, supongo, ya que yo era la actualización de la innerHTML la propiedad a través de JavaScript.

//TotalLoans.Text will always be equal to "" in this scenario
double bTotalLoans = string.IsNullOrEmpty(TotalLoans.Text) 
                   ? 0.00 
                   : Convert.ToDouble(TotalLoans.Text);

¿Cómo puedo actualizar la Text propiedad de la <asp:Label> a través de JavaScript de tal manera que me puede leer la propiedad en el código subyacente?

Actualización

Este es un pequeño problema en un gran formulario que contiene 41 de etiquetas, cada una de las cuales muestra los resultados de algunos de cálculo para el usuario. Tomando el consejo de FishBasketGordo he transformado mi <asp:Label> a una movilidad <asp:TextBox>. Estoy ajuste el valor del cuadro de texto nuevo como tal:

    document.getElementById('<%=TotalLoans.ClientID %>').value = TotalLoans;

De nuevo, en el código subyacente, el valor de TotalLoans.Text siempre es igual a «».


No me importa cambiar la manera de enfocar esto, pero aquí está el quid de la cuestión.

Estoy usando JavaScript para manipular los valores de las propiedades de algunos controles. Tengo que ser capaz de acceder a estos manipular los valores del código de atrás cuando «Enviar» que se hace clic.

Algún consejo de cómo puedo hacerlo?

Actualización 2

Con respecto a la respuesta de @James Johnson, no soy capaz de recuperar el valor de uso de .innerText de la propiedad como se sugiere. He EnableViewState establece en true en el <asp:Label>. Hay algo que me estoy perdiendo?

No entiendo por qué, cuando yo escriba en un cuadro de texto y enviar el formulario, puedo acceder a el valor en el código subyacente, pero cuando voy a cambiar mediante programación el texto de un textbox o label por medio de JavaScript, no puedo acceder a el nuevo valor.

  • Podría no ser posible debido a un asp:Label no es un tipo de <input>. Me siento como que me he topado con esto antes y tuve que utilizar oculto entradas para que el servidor reconozca.
  • Lo que está haciendo va a trabajar después de una devolución de datos se produce. Asp.net/Server no sé si nada cambia hasta que llegue otra oportunidad de echarle un vistazo.
  • A pesar de que podría hacer ellos el trabajo, <asp:Label> controles en realidad, no son la opción correcta para lo que estás haciendo. Me gustaría considerar el uso de sólo lectura de cuadro de texto o algo más semánticamente adecuado.
  • Gracias FishBasketGordo, por favor, consulte actualización de
  • Actualizado mi respuesta. Creo que he encontrado una buena solución para usted.
InformationsquelleAutor splatto | 2012-04-12

7 Comentarios

  1. 16

    Lugar HiddenField Control en el Formulario.

    <asp:HiddenField ID="hidden" runat="server" />

    Crear una Propiedad en la Forma

    protected String LabelProperty
    {
        get
        {
            return hidden.Value;
        }
        set
        {
            hidden.Value = value;
        }
    }

    Actualizar el valor del Campo Oculto de JavaScript

    <script>
       function UpdateControl() {
                document.getElementById('<%=hidden.ClientID %>').value = '12';
       }
    </script>

    Ahora usted puede tener acceso a la Propiedad directamente a través de la Postback. El Label de Control valor actualizado se perderá a través de PostBack en caso de que no se utiliza directamente en el código detrás .

    • Johnson, he intentado publicar esto en su respuesta. Yo no soy capaz de recuperar el valor de uso .propiedad innerText. He EnableViewState establece en true en el <asp:Label>. Hay algo que me estoy perdiendo?
    • No puedo acceder a la Etiqueta de valor actualizado a través de Postback ya que se pierde durante una devolución de datos. Así, necesito usar ViewState/HiddenField de Control.
    • En realidad estaban a la derecha. Yo estaba pensando que el valor podría ser almacenado en un atributo de la etiqueta, pero no lo es.
    • Yo hice un error con respecto a la etiqueta, pero es que yo estoy en la parte superior de 0,001% de ASP.NET los usuarios en el sitio, no creo que es justo decir que no entiendo ASP.NET. Agradezco tu comentario, aunque 🙂
    • Esta solución funciona muy bien. Sin embargo, en realidad la selección de un ASP.NET campo oculto puede ser un problema con un archivo externo de JavaScript y jQuery. Esta respuesta tiene la solución para eso.
    • que no se trabajó para un control de usuario

  2. 4

    Este me Funciona con asp control de etiqueta.

     function changeEmaillbl() {
    
    
             if (document.getElementById('<%=rbAgency.ClientID%>').checked = true) {
                 document.getElementById('<%=lblUsername.ClientID%>').innerHTML = 'Accredited No.:';
             } 
         }
  3. 2

    Utilice el siguiente código

    <span id="sptext" runat="server"></span>

    Java Script

    document.getElementById('<%=sptext'%>).innerHTML='change text';

    C#

    sptext.innerHTML
    • La sintaxis correcta es —- documento.getElementById(«<%=sptext.ClientID%>»).innerHTML= «cambiar el texto»;
  4. 1

    Desde que han actualizado la etiqueta del lado del cliente, usted necesitará un post en orden para que usted esté de lado de servidor de código para reflejar los cambios.

    Si no sabes cómo hacerlo, aquí es cómo me ha ido en el pasado.

    Crear un campo oculto:

    <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />

    Crear un botón que tiene, tanto del lado del cliente y del servidor de lado las funciones de adjunto. Usted está de lado del cliente de la función llenará el campo oculto, y el lado del servidor va a leer. Asegúrese de que usted está de lado de cliente que se llama la primera.

    <asp:Button ID="_Submit" runat="server" Text="Submit Button" OnClientClick="TestSubmit();" OnClick="_Submit_Click" />

    Javascript Del Lado Del Cliente Función:

    function TestSubmit() {
                  try {
    
                 var message = "Message to Pass";
                 document.getElementById('__EVENTTARGET').value = message;
    
               } catch (err) {
                  alert(err.message);
    
              }
    
          }

    C# Lado Del Servidor De La Función

    protected void _Submit_Click(object sender, EventArgs e)
    {
         //Hidden Value after postback
         string hiddenVal= Request.Form["__EVENTTARGET"];
    }

    Espero que esto ayude!

  5. 1

    Lugar de utilizar un Label uso de un texto de entrada:

    <script type="text/javascript">
        onChange = function(ctrl) {
            var txt = document.getElementById("<%= txtResult.ClientID %>");
            if (txt){
                txt.value = ctrl.value;
            }           
        }
    </script>
    
    <asp:TextBox ID="txtTest" runat="server" onchange="onChange(this);" />      
    
    <!-- pseudo label that will survive postback -->  
    <input type="text" id="txtResult" runat="server" readonly="readonly" tabindex="-1000" style="border:0px;background-color:transparent;" />        
    
    <asp:Button ID="btnTest" runat="server" Text="Test" />
    • Aunque se resuelve el OP del problema que causa la otra. La entrada de texto se puede seleccionar con el ratón. Esto da la apariencia de que el campo es actualizable. Entonces, si la tecla de retroceso botón es pulsado, es decir, se desplaza a la página anterior. Adiós a los datos en el formulario.
  6. 0

    La etiqueta de la información se almacena en el ViewState de entrada en la devolución de datos (tenga en cuenta que el servidor no sabe nada de la página, fuera de los valores del formulario publicado de nuevo, que incluye el texto de la etiqueta).. tendría que de alguna manera actualización que en el lado del cliente para saber qué ha cambiado en esa etiqueta, que supongo que no sería digno de su tiempo.

    No estoy del todo seguro de cuál es el problema que estamos tratando de resolver aquí, pero esto podría dar un par de ideas de cómo ir sobre él:

    Podría crear un campo oculto para ir junto con su etiqueta, y en cualquier momento de actualizar su etiqueta, se desea actualizar el valor del bien.. entonces en el código detrás establezca la propiedad Text de la etiqueta de ser lo que era en ese campo oculto.

  7. 0

    Asp.net código subyacente se ejecuta en el primer servidor y, a continuación, la página se representa a cliente (navegador). Código subyacente no tiene acceso a lado del cliente (javascript, html) porque vive en el servidor solamente.

    Así que, o bien el uso de ajax y se envía el valor de la etiqueta de código subyacente. Usted puede utilizar PageMethods , o simplemente publicar la página al servidor donde codebehind vidas, por lo que el código subyacente se puede conocer el valor actualizado 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here