2011-04-06 13 views
47

ho bisogno di implementare valore hash cioè l'URL dovrebbe essere simile a questo:Tra cui valori hash in ASP.NET MVC percorsi URL

/home/index/# creare

Per questo hanno aggiunto un percorso:

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/#{detail}", // URL with parameters 
    new { controller = "Login", action = "LogIn", detail =""} // Parameter defaults 
); 

Accedendo /home/index/#create, mi reindirizza a quella di default.

Come si può fare?

+1

Sulla base di alcune risposte. Conosco #hash, il browser non invia una richiesta al server, MA solo quando l'URL cambia per la seconda volta all'interno della stessa pagina. Quindi questa domanda ha ancora senso. Pensa se l'utente ha aggiunto questo URL ai segnalibri! il #hash può riferirsi all'ancoraggio di commenti o rappresentare un menu selezionato. Sto ancora cercando il modo giusto per farlo in rotta. – CallMeLaNN

risposta

46

Non è possibile recuperare il valore dopo il simbolo # sul server semplicemente perché questo valore non viene mai inviato al server. Solo il javascript lato client ha accesso a questo, quindi definire percorsi con hash non ha molto senso.

+11

Ha senso. Il mio '# hash' usato per memorizzare il menu selezionato (non voglio cookie). Quando l'utente fa clic su un menu, il '' 'è cambiato e AJAX richiede al server di aggiornare il rispettivo contenuto. In questo modo l'utente è in grado di salvare la pagina con il menu selezionato E può utilizzare il pulsante Indietro del browser con '# menuname' leggibile. La prossima volta che l'utente naviga con '#', la pagina caricata avrà già il menu selezionato senza richiesta AJAX non necessaria. Ho bisogno di associare il valore di hash ai dati di rotta perché ognuno di essi può essere considerato una pagina diversa. – CallMeLaNN

+1

È possibile utilizzare javascript per inviare questo al server come parte di una richiesta di modulo. –

5

Quando un browser effettua una richiesta per un URL, non invia nulla dopo un hash al server. Questo percorso può consentire di generare URL del percorso che contengono il valore hash, ma non c'è modo di fare nulla lato server quando l'utente si sposta a tale URL. Questo è solo il modo in cui funziona il web ...

94

Come affermato non v'è alcun modo per farlo utilizzando il routing. L'unica soluzione possibile è aggiungere il # frammento all'URL quando si reindirizza nelle azioni del controller. Per esempio.

return Redirect(Url.Action("Index", "Home") + "#create"); 
+8

IMO questa dovrebbe essere la risposta accettata. L'OP ha chiesto, "Come può essere fatto?" e questa è l'unica risposta che ti dà una ragionevole soluzione alternativa, piuttosto che il motivo per cui non puoi farlo nel modo in cui l'OP voleva in origine. –

+1

Ho appena trascorso 20 minuti a cercare di capire come creare un metodo "return View()" per consentire un parametro hash, o qualsiasi altro risultato di azione - questo è perfetto. Buona risposta! – nocarrier

Problemi correlati