2012-02-16 13 views
14

Sto lavorando con C# .NET MVC2 e sto provando a creare un modulo Ajax che chiama un metodo che cancella un record del database (RemoveRelation). Il processo di cancellazione del record funziona come previsto. Dopo che il record è stato cancellato, il modulo dovrebbe chiamare una funzione javascript che rimuove il record dagli elementi visivi (RemoveRelation (10)). Ciò avviene tramite una chiamata AJAX che su Internet Explorer 9 e Firefox 4 funzionano tutti come previsto tuttavia su Chrome per qualche motivo l'aggiornamento non avviene tramite una chiamata AJAX e l'intera pagina si aggiorna quando il modulo per eliminare il record è in fase di aggiornamento inviato (non è corretto in quanto si suppone che il modulo venga generato con la funzionalità AJAX). Questo è il codice con il quale sto generando la forma:Perché Ajax.BeginForm non funziona in Chrome?

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

Inoltre su Chrome Ho un altro problema con un'Ajax.BeginForm separata.

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

Il precedente codice di modulo iniziale viene utilizzato per aggiungere relazioni all'elenco anziché rimuoverle. Ancora una volta sottolineo che su IE9 e FF4 quanto sopra funziona come previsto, su chrome invece di aggiungerne uno e aggiornarlo tramite ajax, è invece aggiungere il record due volte e, ancora una volta, aggiornare l'intera pagina piuttosto che eseguire l'aggiornamento ajax.

Perché questo si rompe in cromo?

+0

Si consiglia di prendere in considerazione l'uso di http://jquery.malsup.com/form/ invece – Manatherin

risposta

1

ho trovato una soluzione strana al problema. Stavo chiamando del form ajax submit attraverso una 'a' tag in questo modo:

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

Per qualche ragione di chiamare il '.submit()' da una 'a' tag è stato in disordine in cromo causando un aggiornamento completo pagina invece di una chiamata Ajax. Ho risolto il problema utilizzando il seguente codice invece:

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

Questa soluzione ha lavorato anche quando avevo bisogno di aggiungere javascript comanda l'ingresso di chiedere conferma prima di eliminare. L'unica lamentela è che ho dovuto scambiare qualche markup per assicurarmi che i miei pulsanti stessero accadendo nel modulo che stavano sottomettendo (qualcosa che capisco non è sempre possibile in tutte le situazioni).

+2

Potresti averlo tenuto. Devi solo restituire false alla fine di onclick (quindi sarebbe "onclick =" javascript: $ ('# ajaxform'). Submit(); return false; "'). Il motivo è che i tag 'a' fanno sì che il browser navighi verso il collegamento (anche se non va da nessuna parte) e restituiscono false solo impedisce l'azione predefinita del browser. Fonte: http://jszen.blogspot.com/2007/03/return-false-to-prevent-jumping.html – SPFiredrake

12

C'è un problema con Microsoft AJAX e alcuni browser webkit. Mi sono imbattuto in questo problema da un po 'di tempo fa, e la soluzione è piuttosto semplice. Creare un file webkit.js e mettere questo nei contenuti:

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

Allora o all'interno della vostra ScriptManager o da qualche parte nella tua pagina (preferibilmente in una pagina master, ho aggiunto che verso la fine), aggiungere il riferimento script:

Non riesco a ricordare il sito originale che ho trovato le informazioni, ma questo sono stato in grado di ottenere da this page. In bocca al lupo!

+0

merda, pensavo che funzionasse, ma ora ho scoperto che non funzionava, sta ancora facendo l'aggiornamento della pagina intera. –

+0

Verifica se stai ricevendo errori XmlHttpRequest nella console. La console di Chrome è come Firebug, ma è integrata e (IMO) più facile da usare. È stato così che ho scoperto il problema originariamente, perché non funzionava in uno dei file AJAX JS .NET (proprio all'inizio del file). – SPFiredrake

+0

Non ricevo alcun errore XmlHttpRequest o eventuali errori o avvisi relativi. –

1

si può aggiornare il progetto per utilizzare asp.net MVC 3, all'interno di MVC 3, jquery ajax è il default

+0

Per quanto mi piacerebbe aggiornare MVC in questa fase del progetto è impossibile. È un progetto di lavoro e il cambiamento di qualsiasi cosa nel framework significherebbe dover rivedere ogni modulo e ce ne sono molti. Il mio capo non sarebbe affatto felice di passare un altro mese di test. –

Problemi correlati