2012-02-16 17 views
14

Estoy trabajando con C# .NET MVC2 y estoy tratando de crear un formulario ajax que invoque un método que elimine un registro de la base de datos (RemoveRelation). El proceso de eliminación del registro está funcionando según lo previsto. Después de eliminar el registro, el formulario debe llamar a una función de javascript que elimina el registro de las imágenes (RemoveRelation (10)). Esto se hace a través de una llamada AJAX que en Internet Explorer 9 y Firefox 4 funcionan como se esperaba, sin embargo, en Chrome, por alguna razón la actualización no se realiza a través de una llamada AJAX y toda la página se actualiza cuando se está eliminando el registro. enviado (esto es incorrecto ya que el formulario se está generando supuestamente con la funcionalidad AJAX). Este es el código con el que estoy generando la forma:¿Por qué Ajax.BeginForm no funciona en Chrome?

<% using (Ajax.BeginForm("RemoveRelation", "Relations", 
     new AjaxOptions { OnSuccess = "function() { RemoveRelation(10); } ", InsertionMode = InsertionMode.Replace, UpdateTargetId = "Relation10" }, 
     new { id = "DeleteForm10" })) 
    { %> 

Además en Chrome tengo otro problema con un Ajax.BeginForm separada.

<% using (Ajax.BeginForm("AddRelation", "Relations", new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "AddRelation" }, new { id = "AddRelationForm" })) 
    { %> 

El código de formulario de inicio anterior se utiliza para agregar relaciones a la lista en lugar de eliminarlas. Una vez más insisto, en IE9 y FF4 lo anterior funciona como estaba previsto, en Chrome en lugar de agregar uno y actualizar a través de ajax, en su lugar se agrega el registro dos veces y se vuelve a actualizar toda la página en lugar de hacer la actualización de Ajax.

¿Por qué se descompone en cromo?

+0

es posible que desee considerar el uso de http://jquery.malsup.com/form/ en su lugar – Manatherin

Respuesta

1

He encontrado una solución al problema raro. Estaba llamando presentar de forma ajax través de una 'a' etiqueta de este modo:

<A href='#' onclick="javascript:$('#ajaxform').submit();">Remove</a> 

Por alguna razón llamando a la '.submit()' de una 'a' etiqueta estaba jugando en cromo causando una actualización de la página completa en lugar de una llamada ajax. He arreglado el problema utilizando el código siguiente en su lugar:

<input type='submit' value='Remove' /> 

Esta solución también trabajó cuando tenía que añadir comandos JavaScript a la entrada de pedir confirmación antes de eliminar. La única queja es que tenía que cambiar algunos márgenes para asegurarme de que mis botones estuvieran sucediéndose dentro del formulario que estaban enviando (algo que, a mi entender, no siempre es posible en todas las situaciones).

+2

Podrías haberlo guardado. Solo debe devolver false al final de onclick (por lo que sería 'onclick =" javascript: $ ('# ajaxform'). Submit(); return false; "'). La razón es que las etiquetas 'a' hacen que el navegador navegue hacia el enlace (incluso si no va a ninguna parte) y que devuelve falso solo evita que ocurra la acción predeterminada del navegador. Fuente: http://jszen.blogspot.com/2007/03/return-false-to-prevent-jumping.html – SPFiredrake

12

Existe un problema con Microsoft AJAX y ciertos navegadores webkit. Me encontré con este problema hace un tiempo, y la solución es bastante simple. Crear un archivo webkit.js y poner esto en el contenido:

Sys.Browser.WebKit = {}; //Safari 3 is considered WebKit 
if(navigator.userAgent.indexOf('WebKit/') > -1) 
{ 
    Sys.Browser.agent = Sys.Browser.WebKit; 
    Sys.Browser.version = parseFloat(navigator.userAgent.match(/WebKit\/(\d+(\.\d+)?)/)[1]); 
    Sys.Browser.name = 'WebKit'; 
} 

A continuación, ya sea dentro de su ScriptManager o en algún lugar de su página (preferiblemente en una página maestra, he añadido cerca del final), agregar la referencia de script:

<Scripts> 
    <asp:ScriptReference Path="webkit.js" /> 
</Scripts> 
//OR 
<script src="webkit.js"> 

No recuerdo el sitio original que encontré la información, pero esto pude obtener desde this page. ¡Buena suerte!

+0

mierda, pensé que esto funcionó, pero ahora descubrí que no, todavía está haciendo actualización de página completa. –

+0

Vea si está recibiendo errores XmlHttpRequest en la consola. La consola de Chrome es como Firebug, pero está integrada y (IMO) más fácil de usar. Así fue como descubrí originalmente el problema, porque estaba fallando en uno de los archivos .JA AJAX JS (justo al comienzo del archivo). – SPFiredrake

+0

No recibo ningún error de XmlHttpRequest ni ningún error o advertencia sobre ese asunto. –

1

puede actualizar su proyecto para utilizar asp.net MVC 3, dentro de MVC 3, jQuery Ajax es el valor por defecto

+0

Por mucho que me gustaría actualizar MVC en esta etapa del proyecto es imposible. Es un proyecto de trabajo y cambiar cualquier cosa en el marco significaría tener que volver a probar cada formulario y hay bastantes. Mi jefe no estaría feliz de pasar otro mes de pruebas. –

Cuestiones relacionadas