2015-05-11 15 views
5

Possiedo un progetto MVC ASP.NET senza alcuna route (utilizzando l'impostazione predefinita). Sto usando history.pushState sul mio progetto come segue: (Imaging che, siamo in products pagina)Quando si utilizza il carattere '/' in history.pushState, MVC riscrive l'URL

history.pushState(null, null, '#/param1/param2'); 

I cambiamenti URL a: www.domain.com/param1/param2, ma mi aspettavo questo: www.domain.com/products#/param1/param2.

Si noti che, se utilizzo (ad esempio)per il carattere di /, funziona come previsto.

Non ci sono errori JavaScript o C#.

Perché non funziona come previsto?

+1

il codice funziona bene alla mia fine e si reindirizzamento a 'http: // localhost: 52485/home/#/param1/param2' nel mio caso. –

+1

Questo non ha nulla a che fare con ASP.NET MVC btw. 'history.pushState' è strettamente tra il codice JavaScript che viene eseguito sul ** lato client ** e il browser. – bstenzel

+0

è vero, so che il codice non ha nulla sul lato server e ha effetto sul lato client, ma mi chiedo, quando uso quel codice sulla semplice pagina 'html', tutto va bene, ma su un' MVC 'pagina, ho menzionato il problema! (e ovviamente se uso '-', non ho avuto questo problema) –

risposta

0

La chiamata sembra funzionare correttamente su Firefox, Chrome e IE, anche se non escludo che sia specifica per il browser.

Si consiglia di utilizzare history.pushState({}, '', '#/param1/param2');.

In realtà, si potrebbe voler considerare di non utilizzare history per i tag hash, ma invece location.hash.

Si può usare in questo modo:

locaction.hash = '/param1/param2' 
+0

Hai ragione, so che è meglio che non usi' # 'con' pushState', ma nel mio caso, non lo faccio voglio avere un'azione per gestire quel 'params'. (Penso che se non uso '#', e l'utente copi '/ param1/param2' e incolli in una nuova finestra, devo gestirlo con un'azione sul lato C#) –

+0

BTW, ho usato' {} 'instate of 'null', in' pushState', prima di pubblicare questa domanda. (lo stesso per '''' [emprty-string]) –