12

@ Html.ActionLinkに相当するものをjavascriptコードでコーディングするにはどうすればよいですか?つまり、MVCアクションを呼び出して、呼び出し元のビューに戻らずに新しいビューを作成しますか?

4

2 に答える 2

27

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-urlDOMに埋め込み、サーバー側ヘルパーを使用して、生成された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>hrefaction

于 2012-06-11T16:57:19.847 に答える
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変数には、へのWebセーフリンクが含まれます/SomeController/SomeAction

于 2016-02-23T21:41:28.260 に答える