2012-06-11 7 views
11

javascriptコードで@ Html.ActionLinkをコード化する、つまりMVCアクションを呼び出すと、呼び出しビューに戻ることなく新しいビューが作成されます。@ Html.ActionLink from javascript

+0

ajaxを使用しますか?どのようにしてアクションを実行するにはどうすればよいですか? – jrummell

答えて

23

javascriptは、使用しているサーバー側の言語について何も知らないクライアント側の言語です。したがって、サーバーサイドのルート定義を使用してURLを生成するサーバーサイドヘルパーのjavascriptには、同等のものは存在しません。

あなたが達成しようとしているものは非常に明確ではないですが、あなたはサーバー側のヘルパーを使用して、このURLを生成することができジャバスクリプトを通じて、いくつかのURLを呼び出す使用する場合:

<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> 

あなたがこれを使用する場合別のjavascriptファイル内のURL。サーバー側のヘルパーにはアクセスできません。状況に応じて、このURLをDOM要素に含めることもできます。例えば

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

お知らせ私たちはDOMの中に埋め込まれており、生成されたURLは、常に我々のルーティング定義に基づいて、適切になることを保証するために、サーバー側のヘルパーを使用しているdata-url HTML5属性。今、私たちは、別のJavaScriptファイルに控えめに、このdiv要素のクリックイベントをサブスクライブしてURLを取得できます。

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

他の例としては、明らかに、サーバーサイドのHTMLヘルパーを使用して生成されなければならない標準<a><form>要素を含み、その後、別のjavascriptファイルで行う必要があるのは、対応するhrefまたはactionの属性を取得して実際のURLを取得し、そのURLで何かを行うことだけです。

+0

ありがとうございます。それは "window.location.href = url;"でした私が探していたコード – Martin

+1

喜んで私は助けることができました。この回答があなたの問題を解決するのに役立った場合は、隣にあるチェックマークをクリックして回答としてマークすることを検討してください。http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer -work –

+1

@DarinDimitrovこのコードの塊で、@ Url.Action( "SomeAction"、 "SomeController")という特定のアクションにパラメータを渡すことはできますか? –

0

もう1つの方法は、URLをページのどこかに隠した<div>に保存し、後でJavascript経由で呼び出すことです。

Index.cshtml

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

次にあなたが望む任意のリンクを構築するためにあなたのScript.jsファイルでこれを使用することができ、それは次のようになります。

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

URL変数は、/SomeController/SomeActionにWebセーフのリンクが含まれます。