@ Html.ActionLinkに相当するものをjavascriptコードでコーディングするにはどうすればよいですか?つまり、MVCアクションを呼び出して、呼び出し元のビューに戻らずに新しいビューを作成しますか?
2 に答える
javascript
は、使用しているサーバー側の言語について何も知らないクライアント側の言語です。したがって、サーバー側のルート定義を使用してURLを生成するサーバー側ヘルパーのjavascriptに相当するものがないのは正常です。
何を達成しようとしているのかは明確ではありませんが、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>
data-url
DOMに埋め込み、サーバー側ヘルパーを使用して、生成された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>
と要素が含まれます。その後、個別のjavascriptファイルで行う必要があるのは、対応する属性または属性をフェッチして実際のURLを取得し、それを使用して何かを行うことです。<form>
href
action
もう1つのオプションは、URLを<div>
ページの非表示の場所に保存し、後でJavascriptを介して呼び出すことです。次のようになります。
Index.cshtml:
<div style="display: none;" id="url">
@Url.Action("SomeAction", "SomeController")
</div>
次に、これをScript.jsファイルで使用して、必要なリンクを作成できます。
var url = $("#url").text();
URL変数には、へのWebセーフリンクが含まれます/SomeController/SomeAction
。