edición final:MVC3 Ajax.BeginForm onSuccess no se ejecuta en Firefox
Después de seguir la respuesta de Darin Dimitrov, he encontrado que el problema terminó siendo que la llamada AJAX para UpdateForm()
método del controlador era devolviendo una cadena vacía Esta fue una modificación que encontré necesaria hace algún tiempo después de experimentar un problema diferente. Pasar una cadena vacía hacía que el analizador de Firefox se ahogara (mientras que a Chrome y al IE no le importaba, aparentemente), así que reemplacé la cadena vacía con un div
vacío.
Editar:
gracias a las sugerencias de Darin Dimitrov abajo, he encontrado que la razón por la que estaba teniendo problemas es debido a un error de ser lanzado cada vez que se envía el formulario en cuestión.
El error lee "Nodo no se puede insertar en el punto especificado en la jerarquía". Esto se lanza cada vez que se envía el formulario. Noté en los datos de POST que parece pensar que esto es un XMLHttpRequest. ¿Es esa la causa (la solicitud AJAX en cuestión solo devuelve HTML)? Aquí es los datos POST de Firebug:
Este error se lee "Error de análisis XML - encuentre elemento".
FYI-el código HTML de ser devuelto siempre es una cadena vacía ...
Tengo una aplicación que se ejecuta en MVC3 IIS7. En uno de mis puntos de vista, tengo una forma que se construye utilizando una función de ayuda HTML de Microsoft:
@using (Ajax.BeginForm("UpdateForm", new AjaxOptions { UpdateTargetId = "TargetDiv", InsertionMode = InsertionMode.InsertAfter, OnSuccess = "ClearTextBox" }))
{
@Html.TextArea("txtInput", new { id = "txtInput", cols = "20", rows = "5", wrap = "virtual" })
<input id="send" class="button" type="submit" value="Send"/><br />
}
Esto genera el siguiente código HTML cuando el controlador ofrece este punto de vista:
<form action="/RootName/ControllerName/UpdateForm" data-ajax="true" data-ajax-mode="after" data-ajax-success="ClearTextBox" data-ajax-update="#TargetDiv" id="form0" method="post">
<textarea cols="20" id="txtInput" name="txtInput" rows="5" wrap="virtual"></textarea>
<input id="send" class="button" type="submit" value="Send"><br>
</form>
Lo que estoy básicamente tratando de hacer aquí es tomar el texto dentro de la llamada TextArea
txtInput
y añadirlo al final de la llamada Div
TargetDiv
cada vez que el botón se hace clic por encima de Send
y limpiar el texto desde txtInput
después de que se completa el anexar mediante el método ClearTextBox()
(Javascript). El apéndice siempre funciona en todos los navegadores; y cuando corro en Internet Explorer o Chrome, la limpieza del texto funciona bien. Sin embargo, Firefox no parece querer llamar al método ClearTextBox()
.
¿Firefox no es compatible con esta opción data-ajax-success
en la firma del formulario?
cosas que he intentado
me encontré con este individuo: Ajax.BeginForm doesn't call onSuccess
La solución es añadir este script:
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
Estoy llamando a este script :
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
... pero traté de cambiarlo por las dudas. Sin alegría.
se me pidió que trate de cambiar la llamada al método para incluir paréntesis por algunas personas en la sala de chat de C# para que el HTML salió como esto:
<form action="/WebChat/TMWC/UpdateForm" data-ajax="true" data-ajax-mode="after" data-ajax-success="ClearTextBox()" data-ajax-update="#chatText" id="form0" method="post">
<textarea cols="20" id="txtInput" name="txtInput" rows="5" wrap="virtual"></textarea>
<input id="send" class="button" type="submit" value="Send"><br>
</form>
Pero eso no ayudó.
La gente en C# chat también sugirieron sustituyo la llamada Javascript con una alerta - algo como esto:
<form action="/WebChat/TMWC/UpdateForm" data-ajax="true" data-ajax-mode="after" data-ajax-success="alert('yo!')" data-ajax-update="#chatText" id="form0" method="post">
<textarea cols="20" id="txtInput" name="txtInput" rows="5" wrap="virtual"></textarea>
<input id="send" class="button" type="submit" value="Send"><br>
</form>
Mientras que Chrome aparece el cuadro de mensaje, Firefox no lo hace!
"data-ajax-success" parece un atributo personalizado simplemente diciéndole qué método llamar, por lo que dudo que sea un problema con el atributo en sí. No estoy seguro de qué dev. herramientas que Firefox tiene (utilizo Chrome en su mayoría), pero verifico allí para ver si muestra algún error JS en otro lugar del código. – justinb138
Estoy usando Firebug pero no me ha señalado nada ... = ( –
¿Podría publicar el método 'ClearTextBox()'? Acabo de probar esto (archivo-> nuevo proyecto mvc3, usado 'jquery.unobtrusive-ajax .min.js'), y funciona bien en FF. Mi versión de ClearTextBox es esta: 'función ClearTextBox() {$ (" # txtInput "). val (" ");}' –