template smartadmin smart plugin files filedownload aspx c# asp.net asp.net-mvc-2 asp.net-ajax

c# - smartadmin - ¿Por qué Ajax.BeginForm no funciona en Chrome?



smartadmin github (3)

puede actualizar su proyecto para usar asp.net MVC 3, dentro de mvc 3, jquery ajax es el predeterminado

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 el formulario:

<% 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 por separado.

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

El código Begin Form anterior se usa 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é esto se descompone en Chrome?


Hay un problema con Microsoft AJAX y ciertos navegadores webkit. Me encontré con este problema hace un tiempo, y la solución es bastante simple. Crea un archivo webkit.js y ponlo en los contenidos:

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''; }

Luego, ya sea dentro de su ScriptManager o en algún lugar de su página (preferiblemente en una página maestra, lo agregué cerca del final), agregue la referencia del script:

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

No recuerdo el sitio original en el que encontré la información, pero esto pude obtener desde esta página . ¡Buena suerte!


He encontrado una solución extraña al problema. Estaba llamando al envío del formulario ajax a través de una etiqueta ''a'' como esta:

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

Por alguna razón, llamar al ''.submit ()'' de una etiqueta ''a'' estaba estropeando en cromo, causando una actualización de página completa en lugar de una llamada ajax. Solucioné el problema usando el siguiente código:

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

Esta solución también funcionó cuando necesité agregar comandos javascript a la entrada para solicitar confirmación antes de eliminar. La única queja es que tenía que cambiar algunos márgenes para asegurar que mis botones estuvieran sucediéndose dentro del formulario que estaban enviando (algo que entiendo no siempre es posible en todas las situaciones).