2012-06-11 14 views

risposta

23

javascript è un linguaggio lato client che non conosce nulla sulla lingua lato server che si sta utilizzando. Quindi è normale che non ci siano equivalenti in javascript del server side helper che genera un url usando le definizioni del percorso lato server.

E non è del tutto chiaro che cosa si sta cercando di raggiungere, ma se si desidera utilizzare chiamare qualche url tramite javascript si potrebbe generare questo URL utilizzando un aiutante lato server:

<script type="text/javascript"> 
    var url = '@Url.Action("SomeAction", "SomeController")'; 
    // do something with the url client side variable, for example redirect 
    window.location.href = url; 
</script> 

Se si desidera utilizzare questo url in un file javascript separato in cui non si ha accesso agli helper lato server si potrebbe ancora, a seconda della situazione, includere questo URL in qualche elemento DOM.

Ad esempio:

<div id="foo" data-url="@Url.Action("SomeAction", "SomeController")">Click me</div> 

Avviso l'attributo data-url HTML5 che abbiamo integrato nel DOM e ha utilizzato un lato aiutante server per garantire che l'URL generato sarà sempre corretto in base alle nostre definizioni di routing. Ora potremmo in un file JavaScript separato discretamente sottoscrivere l'evento click di questo div e recuperare l'url:

$('#foo').click(function() { 
    var url = $(this).data('url'); 
    // do something with the url client side variable, for example redirect 
    window.location.href = url; 
}); 

Altri esempi includono, ovviamente, lo standard <a> e <form> elementi che dovrebbero essere generati utilizzando aiutanti lato server HTML e poi tutto quello che devi fare nel tuo file javascript separato è quello di recuperare gli attributi href o action corrispondenti per recuperare l'url effettivo e fare qualcosa con esso.

+0

Grazie. Era il "window.location.href = url;" codice che stavo cercando – Martin

+1

Contento di aver potuto aiutare. Se questa risposta ti ha aiutato a risolvere il problema che avevi, potresti considerare di contrassegnarlo come risposta facendo clic sul segno di spunta accanto ad esso: http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer -work –

+1

@DarinDimitrov Possiamo passare i parametri all'azione specifica '@ Url.Action ("SomeAction", "SomeController")' in questa porzione di codice? –

0

Un'altra opzione è quella di memorizzare l'URL in un numero nascosto <div> da qualche parte nella pagina e chiamarlo tramite Javascript in seguito. Si sarebbe simile a questa:

Index.cshtml:

<div style="display: none;" id="url"> 
    @Url.Action("SomeAction", "SomeController") 
</div> 

quindi è possibile utilizzare questo nella vostra script.js file per creare tutti i collegamenti che si desidera.

var url = $("#url").text(); 

La variabile URL sarebbe quindi contenere un link a WebSafe /SomeController/SomeAction.

Problemi correlati