0

ログイン後に ReddirectToAction() を使用して、アカウントコントローラーからコントローラーのインデックスページにユーザーをリダイレクトするアプリケーションがあります。

RedirectToAction("Index", "MyController");

それは私をにリダイレクトします//MyApp/MyController/

MasterPage ビューにもナビゲーションがあり、ActionLink を使用します。

@Html.ActionLink("Index", "SomeOtherController")
... (other links)

それは私をにリダイレクトします//MyApp/SomeOtherController

問題は**/**、最初のルートの終わりの性質にあります。onClick が jQuery .post() を呼び出すマスター ページに partialView があります。

function SomeFunction(id) {
    $.post("Controller/Action", { id: id },
        function () {
            ... some code
        });
}

しかし、ログインからのリダイレクト後にその関数を呼び出すと、このルートにアクセスしようとします:

/MyController/Controller/Action 

それは存在しません。ポストコールを次のように変更すると

$.post("../Controller/Action",  ...

**/**それは正常に機能しますが、ルートの最後にないため、nav リンクでは機能しません。

私は何をすべきか?最後に、またはなしで、RedirectToAction と ActionLink から一意のパスを取得する方法は**/**?

ノート:

<a></a>マスター ページのナビゲーションに使用し**/**て、最後にパスを入力できますが、むしろ ActionLink を使用したいと思います

4

1 に答える 1

1

ここで重要なのは、ルーティングされた URL を生成して jQuery 関数に渡すために MVC が必要であるということです。

1.jQuery コードがビュー内にネストされている場合は、次の操作を実行できます。

function SomeFunction(id) {
    $.post('@Url.RouteUrl("Action", "Controller")', { id: id },
        function () {
            ... some code
        });
}

2.jQuery コードが外部ファイル (myScripts.js など) にある場合は、MVC で生成されたルートを何らかの方法で jQuery 関数に渡す必要があります。これは要素に直接関連付けられていないため、おそらくこれをビューの非表示要素として設定するのが最適です。

意見

<input type="hidden" id="jsRoute" value="@Url.RouteUrl("Action", "Controller")"/>

JS

function SomeFunction(id) {
    $.post('$("#jsRoute").val()', { id: id },
        function () {
            ... some code
        });
}
于 2013-03-19T15:23:43.067 に答える