2009-10-19 72 views
11

Algunas cosas raras están sucediendo, estoy convirtiendo una aplicación que solía usar javascript para abrir otra página web en una pequeña ventana para la entrada de datos para usar un ModalPopupExtender.modalpopupextender y comas que aparecen en mi textbox asp.net

Parece que funciona bien, pero en el evento OK, cuando hago txtData.Text (el cuadro de texto en mi ventana emergente modal), vuelve con una coma antes de los datos, por lo que si escribe "Conejo", vuelve como "Conejo".

también cuando lo uso varias veces, en otro lugar en el que podría hacer clic para demostrarlo, y el tipo "pescado", comienza a volver con cosas por el estilo "Conejo ,, Fish"

I don' ¿Sabes por qué o cómo evitar que haga esto ... alguna idea?

+0

Por favor, publique su código. – Jim

+1

Experimentando exactamente el mismo problema. Esto parece ser así desde que actualizamos la última versión del kit de herramientas de control AJAX. También provoca errores aleatorios como Mensaje: Sys.InvalidOperationException: no se pueden agregar a la aplicación dos componentes con el mismo ID '[ExtenderID]'. para cada control/extensor ajax en la página. –

+0

Al final no pude encontrar una solución, así que terminé modificando mi página para usar Javascript para ocultar y mostrar mi diálogo modal, y haciendo una actualización de página completa en lugar de usar un panel de actualización ... ¡apesta! – NibblyPig

Respuesta

1

Por alguna razón, no parece suceder si el cuadro de texto está configurado para ReadOnly.

Estoy pensando que podría haber una solución al mostrar un cuadro de texto editable al usuario, capturar las teclas y actualizar un cuadro de texto de solo lectura que está oculto para el usuario.

Todavía un poco complicado, pero no puedo retroceder al lanzamiento de mayo porque hay otro error en esa versión con el ComboBox que debo evitar.


ACTUALIZACIÓN:

como un poco de fondo, que tienen un control de usuario (ascx) dentro de mi emergente modal porque necesito volver a utilizarlo. El dispositivo ascx tiene que manejar la entrada del usuario en sí (la página que contiene no sabe qué está pasando dentro del control) por lo que cuando el usuario hace clic en un botón hago una devolución de llamada y proceso los datos. Si se devuelve un resultado exitoso a la función de devolución de llamada del cliente, simulo un clic de lo que la página que lo contiene es el botón "OK" que en realidad es invisible para el usuario.

He cambiado mi código para agregar un cuadro de texto oculto, de solo lectura y copie el texto del cuadro de texto original en el nuevo cada vez que cambie el texto.

<asp:TextBox runat="server" ID="txtName"></asp:TextBox> 

convierte

<asp:TextBox runat="server" ID="txtName" onchange="document.getElementById(this.id + 'RO').value = this.value"></asp:TextBox> 
    <asp:TextBox runat="server" ID="txtNameRO" ReadOnly="true" style="display:none;"></asp:TextBox> 

entonces cuando pase valores de vuelta en la devolución de llamada en lugar de obtener el valor de txtName, utilizo txtNameRO.

No creo que esto ayude si está haciendo una devolución de datos, pero podría agregar una devolución de llamada antes de la devolución de datos como lo hice. ¡Espero que esto ayude a alguien de todos modos!

2

Tuve el mismo problema con los valores anteriores que volvían separados por comas. Parecía que mi botón de autorización estaba dentro del panel de actualización y también lo tenía en la sección de desencadenantes. Al eliminar el botón de la sección de desencadenadores del panel de actualización se solucionó el problema.

saludos cordiales - Tobias

4

Lo mismo aquí. No hay pista de por qué sucede. Cada devolución de datos iniciada por botones dentro del panel agrega comas y valores previos a todos los campos de texto.

Enlazando en TextBox. El setter de texto reveló que los datos corruptos provienen de la recopilación de datos posteriores. Por lo tanto, significa que justo antes de la devolución de datos, ModalPopupExtender corrompe los datos.

P.S. No estoy utilizando UpdatePanel, pero el Panel normal por lo que no hay activadores asociados con los botones.

Actualizado: solución encontrada.

El problema parece desaparecer al retroceder al lanzamiento de mayo de AjaxToolKit (http://ajaxcontroltoolkit.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=27326).

+0

Volviendo al lanzamiento de mayo funcionó para mí. Gracias. – Graham

+0

muchas gracias. volver al lanzamiento de mayo funcionó como un amuleto. – kentchen

+0

¡Por Dios! Muchas gracias, esto me estaba volviendo loco. –

0

He implementado con éxito un hack completo basado en la respuesta de Jen. Yo uso un ASP: HiddenField para mantener el valor Quiero publicar espalda, y yo lo pueblan con un cuadro de entrada HTML puro

<asp:HiddenField ID="txt" runat="server"/> 
<input type="text" onchange='document.getElementById("<%= txt.ClientID %>").value = this.value;' /> 

Este es el peso más ligero que la solución de Jen como que estás siendo sólo la publicación de vuelta un servidor controlar.

Por cierto, este es un error muy significativo en el Ajax Toolkit. Se puede votar y hacer comentarios sobre ella aquí:

CodePlex Issue

Imagina que estás en Chicago. Vota temprano, vota a menudo.

0

Para mí, la solución fue sacar el módulo modal del panel de actualización principal. Una vez que hice eso, las comas se fueron. Si realmente necesita un panel de actualización dentro del menú emergente modal, cree uno propio dentro de ese panel.
No necesité volver a la versión anterior del kit de herramientas.

+0

arañar eso, publiqué demasiado pronto. Esto no funcionó para mí. Supongo que retrocederé después de todo. –

0

He estado tratando de resolver esto por un día y una persona muy útil en mi oficina ha encontrado una excelente solución.

Movimos el ModalPopUpExtender y el siguiente panel emergente controlado por el extensor hasta el exterior del UpdatePanel más externo en la página, creamos un botón falso y dimos la identificación del botón falso a la propiedad TargetControlID de ModalPopUpExtender.

<asp:Button runat="server" ID="dummyButton" CausesValidation="false" Style="display: none" /> 

<cc1:ModalPopupExtender ID="ModalPopupExtender1" runat="server" TargetControlID="dummyButton" CancelControlID="CancelPopUp" PopupControlID="PanelID" BackgroundCssClass="modalBackground" /> 

Dentro de mi formularios/página donde el extensor de ventanas emergentes y paneles que solía ser, he creado un evento OnClick en el botón que se utilizó a utilizar para activar el ModalPopupExtender.

<asp:ImageButton ID="ButtonID" runat="server" Text="Add" ImageUrl="~/Images/Add-32-1-small.png" OnClick="LoadPopUp" /> 

En mi botón que activa el ModalPopupExtender, he creado un evento OnClick llamado "LoadPopUp" - en LoadPopUp en el código detrás Simplemente puse ModalPopUpExtender1.Show();

protected void LoadPopUp(object sender, EventArgs e) 
{ 
    ModalPopupExtender1.Show(); 
} 
3

También encontré un foro que indica que puede ser un comportamiento HTML estándar para cuando hay varios controles en el formulario con el mismo nombre. Esto en mente (y suponiendo que haya un error en los controles ajax) La forma en que codifiqué fue agregar en mi Page_Load el siguiente tipo de declaración para cada uno de mis cuadros de texto.

cadena [] vals = txtValue.Text.Split (Convert.ToChar (",")); txtValue.Text = vals [vals.Longitud - 1]; // Parece que mi último valor siempre estuvo en el último elemento

Dado que la carga del formulario ocurre antes del evento del botón, ordeno mis campos antes de que lleguen al evento que trata sus valores.

+0

Para mí, la afirmación sobre los elementos de formulario múltiple fue la clave. Tenía un cuadro de diálogo de IU de jQuery en la página, después de cambiar a utilizar devoluciones de datos asíncronas, el formulario se copiaba para el diálogo, pero no se eliminaba. Cuando elimino el formulario antes de la devolución, ya no obtengo valores delimitados por comas. –

2

Mi respuesta fue similar a Smarty's. Mi página visto así ...

<UpdatePanel> 
    <GridView> 
     <Button> <-- These buttons fire modal popup programmatically. 
     <Button> 
     <Button> 
    </GridView> 
    <ModalPopup> 
    <HiddenField> <-- Dummy target of modal popup. 
</UpdatePanel> 

La solución fue cambiar a este ...

<UpdatePanel> 
    <GridView> 
     <Button> <-- These buttons fire modal popup programmatically. 
     <Button> 
     <Button> 
    </GridView> 
</UpdatePanel> 
<ModalPopup> 
<HiddenField> <-- Dummy target of modal popup. 

que tenían que registrarse en cada botón como un control de devolución de datos con el scriptmanager en el RowDataBound gridview evento. El lado negativo es que tengo más devoluciones de datos completas. Pero, resolvió el problema.

+0

Hasta ahora, esto está funcionando para mí. Error molesto. –

3

Tuve un problema similar, con un cuadro de diálogo jQuery dentro de un UpdatePanel. Como pude leer en diferentes sitios, el problema es causado por duplicados dentro del árbol DOM.

Al final encontré una solución muy simple. Asigno el diálogo para el div, a continuación, abrir o cerrar por JavaScript y vuelva a ejecutar esta pequeña paz de código para eliminar los duplicados:

var count = $(".dialog").length; 
for (i = 1; i < count; i++) { 
    $(".dialog").first().remove(); 
} 

EDIT: que resultó no ser tan simple. Al final, mi código era la siguiente:

En el documento listos (y también las llamadas páginas asíncronos):

function AddDialog() { 

    var dlg = $(".dialog").dialog({ autoOpen: false }); 
    dlg.parent().appendTo($("form:first")); 

    var targetSelector = ".myDialog"; // watch out: can't use ID here! 

    if (mustOpenDialog) { 

     $(targetSelector).last().remove(); //-- remove last copy 

     var dlg = $(targetSelector).dialog({ autoOpen: true }); 

     var count = $(targetSelector).length; 
     for (i = 1; i < count; i++) { 
      $(targetSelector).last().remove(); 
     } 
    } 

    if (mustCloseDialog) { 

     $(targetSelector).dialog("close"); 
     var count = $(targetSelector).length; 
     for (i = 1; i < count; i++) { 
      $(targetSelector).first().remove(); 
     } 
    } 

} 

En mi código completo, mustOpenDialog y mustCloseDialog están ubicadas en el código subyacente.

+1

En jQuery Dialogs, una solución es, al crear el diálogo, definir el evento 'close' y destruir el diálogo en él. De esta manera: cerrar: function (event, ui) { $ (this) .dialog ('destroy'). Remove(); } – Mee

2

Esto es bastante tarde para responder, pero lo estoy documentando aquí para que otros puedan beneficiarse. Mi escenario

Abra el control de usuario dentro del cuadro de diálogo de jquery en el botón haga clic en. Este control de usuario tenía un panel de actualización dentro y pocos cuadros de texto. La primera vez que abría el diálogo, funcionaba como un hechizo. En clics posteriores para abrir el cuadro de diálogo, noté un comportamiento extraño. Tenía pocos cuadros de texto dentro del control de usuario (dentro del panel de actualización). En cualquier publicación parcial posterior, el texto de los cuadros de texto cambió a current text, current text. Si el valor del cuadro de texto era fish, luego de cualquier devolución de datos parcial se cambió a fish, fish.

El motivo fue que estaba usando jquery para abrir el cuadro de diálogo. También agregué el diálogo para formar al hacer clic en el botón.

dlg.parent().appendTo($('form:first')); 

Así en los clics posteriores múltiples controles de usuario donde anexan a DOM y por lo tanto mientras que la construcción de los datos después de vuelta, existía más de un control con mismo ID y por lo tanto hay valores donde adjunta usando "" - coma.

Así que mi solución era simple, al cerrar el cuadro de diálogo, sólo sacó de DOM

llegué pista de enlace siguiente. Publicarlo aquí para futura referencia here

+0

Ese enlace ya no está disponible. ¿Puedes publicar más de tu código? –

3

Simplemente compartiendo esta solución para todos en este problema. Trate de no usar el control asp en su lugar use html.

*<input type="text" id="txtID" runat="server" class="myClass" />* 

esto funciona bien para mí.

Gracias,

0

que tenía el mismo problema excepto que no estoy usando los paneles AjaxControlToolkit o actualizar. Mi problema se resolvió moviendo la etiqueta <form> de la página maestra ASP.net a la página donde están los cuadros de texto. Puede ayudar a alguien

0

tiene el mismo problema y he encontrado la solución aquí: http://ajaxcontroltoolkit.codeplex.com/workitem/26259

El problema es ajax última versión, sólo tiene que instalar años 2009 Versión Ajax y ModalPopup trabajará muy bien con su código real.

Tuve el mismo problema y encontré la solución en el enlace que indico arriba. El problema viene con las versiones recientes de ajax, simplemente instala la versión del año 2009 y el modo modal funciona con el código actual.

0

La solución es sacar el menú emergente modal del panel de actualización principal. Once Do that las comas desaparecerán. Si realmente necesita un panel de actualización dentro del menú emergente modal, cree uno propio dentro de ese panel.

Cuestiones relacionadas