2013-02-24 15 views
9

mi capita di incontrare questa situazione interessante:<a> link non funzionante cliccando, funziona solo da "collegamento Apri in nuova scheda" comando

<ul> 
    @foreach (var item in Model) 
    { 
     <li> 
     <a href="@Url.Action("Details", "Product", new { id = item.Id })" >@item.Name</a> 
     </li> 
    } 
</ul> 

quando clicco un link, nulla accada, Dettagli del prodotto non si apre. Ma faccio "Apri link in una nuova scheda", quindi si apre. Quale può essere la sua ragione?

+4

Alcuni JavaScript magici. – Musa

+3

Qualsiasi JS che potrebbe impedire l'azione predefinita di un tag di ancoraggio nel codice, forse? – Mortalus

+0

Si può controllare l'HTML generato per quella vista Razor? Sospetto che generi un URL vuoto nell'attributo href. – ThomasArdal

risposta

25

Si dispone di un codice javascript che impedisce l'esecuzione dell'azione predefinita del tag di ancoraggio. Puoi controllare la scheda Network in FireBug o Chrome DevTools per vedere se è stata fatta una richiesta AJAX quando fai clic sul link. Potresti provare a escludere i file javascript finché non trovi quello che sta facendo questo.

+8

su Chrome, DevTools ha una vista chiamata "listener di eventi", che permette di identificare tali gestori di eventi. Uno svantaggio è che non mostra i gestori ereditati. –

+0

Il vecchio post, ma la risposta mi ha aiutato oggi!aveva un randagio 'return false' su un click handler del documento ... Grazie! – Wildcard27

+0

Guardando le intestazioni di risposta mi ha aiutato a rintracciare perché un semplice collegamento a un gruppo di Facebook è stato negato da FB. Grazie! – cyrf

1

Prova questo codice ...

<a href="http://google.com/" onclick="location.replace('http://google.com/'),'_top'">Google</a> 
2

correttamente data dal Darren, è sicuramente un po 'di codice javascript che sta inviando una richiesta AJAX (posta o ottenere) che impedisce il collegamento di funzionare come ci si aspetterebbe .

Tuttavia, se è stata utilizzata una risorsa esterna, potrebbe essere difficile correggere l'errore nei file min.

suggerisco usare una linea jQuery evento onclick per aggirare la chiamata AJAX

<a href="http://foo.bar/" onclick="window.open('https://www.foo.bar/culrsteam')">Foo</a>

Si potrebbe inoltre utilizzare window.open('https://www.foo.bar/culrsteam', '_blank') come con target='_blank'

1

Ciò può accadere se l'indirizzo non lo fa avere il protocollo di trasferimento all'interno dell'attributo href. Un esempio potrebbe essere il collegamento localhost come <a href="localhost"></div> anziché <a href="http://localhost"></div>. Vedrai che Google Chrome assegnerà uno stato annullato se fatto, e in Safari verrà visualizzata una finestra di dialogo che chiede in quale applicazione aprire il collegamento, poiché il protocollo di trasferimento è sconosciuto. Ho riscontrato questo problema durante l'impostazione del collegamento a $_SERVER['HTTP_HOST'] in PHP.

Il punto chiave è, assicurarsi di lasciare il protocollo di trasferimento di fronte al collegamento sia esso http://, https://, ftp:// o qualsiasi altra cosa.

2

Forse hai impedito l'evento di reindirizzamento di un tag con JavaScript.

Ad esempio:

$(document).on('click', 'a.thatTag', function (e) { 
    // ... 
    e.preventDefault(); 
}); 

.preventDefault() impedisce il reindirizzamento.

Problemi correlati