Questo è un comportamento previsto.
Il sistema di routing si trova sul lato server. Il browser non sa nulla delle rotte e ciò che stai facendo accade nel browser.
Se si desidera ottenere tale percorso, è necessario comporlo sul lato client con uno script personalizzato che utilizza l'azione <form>
, i valori dei valori <input type="text">
.
Non è possibile generare l'Url sul lato server (operazione che potrebbe essere eseguita con alcuni metodi di estensione UrlHelper) poiché le modifiche alle caselle di testo non verrebbero aggiornate.
Questo non è consigliabile perché se si apportano modifiche ai percorsi, è possibile dimenticare di aggiornarli negli script del browser, rompendo l'applicazione.
È possibile evitare questo problema creando l'URL sul lato server utilizzando un metodo di estensione UrlHelper con segnaposti speciali, che potrebbero essere facilmente sostituiti sul lato client. Cioè generare un URL simile a questo:
http://localhost/Pesquisar/$aaa$/$bbb$/$id$
fornendo RouteValues come questo: new {aaa="$aaa$, bbb="$bbb$, id="$id$"}
ad un metodo UrlHelper. Questo URL può essere memorizzato nella proprietà value di un campo nascosto.
Quindi, creare uno script del browser per l'evento click del pulsante, recuperare l'url con i segnaposto dal campo nascosto e sostituire i segnaposto con i valori effettivi delle caselle di testo. Per eseguire il comando get: document.location = theUrl;
Se si desidera d questo per molte istanze diverse, è possibile creare un Helper per geenrare il campo nascosto con l'Url e un javascript che effettua le sostituzioni.
La domanda è ... vale la pena?
si verifica la stessa cosa quando l'ID ha un valore? –
@JeroenVannevel: sì. Se digito manualmente nel browser funziona ('http: // localhost: 00000/Pesquisar/foo/bar/1') ma tramite il modulo GET non lo fa. Voglio dire, funziona, ma non con un URL amichevole. – Fabricio