2012-06-22 25 views
6

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.

JQuery Error

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:

POST Data 1

POST Data 2

POST Data 3

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 TextAreatxtInput y añadirlo al final de la llamada DivTargetDiv cada vez que el botón se hace clic por encima de Sendy 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!

+0

"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

+0

Estoy usando Firebug pero no me ha señalado nada ... = ( –

+0

¿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 (" ");}' –

Respuesta

1

Estado no repro en una nueva aplicación ASP.NET MVC 3 creada.

controlador:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult UpdateForm() 
    { 
     return Content(DateTime.Now.ToLongTimeString()); 
    } 
} 

Ver (~/Views/Home/Index.cshtml):

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script> 
<script type="text/javascript"> 
    function ClearTextBox() { 
     $('textarea').val(''); 
    } 
</script> 

<form action="/Home/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> 

<div id="TargetDiv"></div> 

funciona perfectamente bien en Chrome, FF y el IE.

También es posible que desee asegurarse de que el encabezado HTTP de respuesta Content-Type coincide con la respuesta real que está enviando. Por ejemplo, he visto a mucha gente enviar el encabezado de respuesta application/json con algunos JSON no válidos en el cuerpo de la respuesta que produce los analizadores más sensibles para ahogar.

+0

¡Gracias por toda su ayuda! (Futuros lectores: ver mis ediciones en la pregunta) –

Cuestiones relacionadas