web-dev-qa-db-ja.com

JavaScript / jQueryを使用したASP.NET MVCの別のページへのリダイレクト

JavaScript/jQuery/Ajaxを使用してASP.NET MVC 3.0のあるページから別のページにリダイレクトしたい。ボタンクリックイベントで、次のようなJavaScriptコードを記述しました。

function foo(id)
{
    $.post('/Branch/Details/' + id);
}

私のコントローラーコードは次のとおりです。

public ViewResult Details(Guid id)
{
     Branch branch = db.Branches.Single(b => b.Id == id);
     return View(branch);
}

ボタンをクリックすると、BranchController内のDetailsアクションが呼び出されますが、Detailsビューには戻りません。

エラーも例外も発生しませんでした。 Firebug でステータス200 OKを示しています。コードの何が問題になっていますか?詳細ビューページにリダイレクトするにはどうすればよいですか?

67
user946393

$ .post AJAX呼び出しで成功コールバックに登録していません。リクエストは実行されますが、結果には何もしません。結果に役立つ何かをしたい場合は、試してみてください:

$.post('/Branch/Details/' + id, function(result) {
    // Do something with the result like for example inject it into
    // some placeholder and update the DOM.
    // This obviously assumes that your controller action returns
    // a partial view otherwise you will break your markup
});

一方、リダイレクトする場合は、AJAXは絶対に必要ありません。 AJAXは、同じページにとどまり、その一部のみを更新する場合にのみ使用します。

したがって、ブラウザをリダイレクトするだけの場合:

function foo(id) {
    window.location.href = '/Branch/Details/' + id;
}

サイドノートとして:このようなURLをハードコーディングしてはいけません。 ASP.NET MVCアプリケーションでURLを処理するときは、常にURLヘルパーを使用する必要があります。そう:

function foo(id) {
    var url = '@Url.Action("Details", "Branch", new { id = "__id__" })';
    window.location.href = url.replace('__id__', id);
}
130
Darin Dimitrov

これは、ビューで非表示の変数を使用し、その変数を使用してJavaScriptコードからポストすることで実行できます。

ビューに私のコードがあります

@Html.Hidden("RedirectTo", Url.Action("ActionName", "ControllerName"));

JavaScriptファイルでこれを次のように使用できます。

 var url = $("#RedirectTo").val();
 location.href = url;

それは私にとって魅力のように働いた。それがあなたにも役立つことを願っています。

36
Mridul

次を使用できます。

window.location.href = '/Branch/Details/' + id;

しかし、Ajaxコードは、成功またはエラー関数なしでは不完全です。

9
run
// in the HTML code I used some razor
@Html.Hidden("RedirectTo", Url.Action("Action", "Controller"));

// now down in the script I do this
<script type="text/javascript">

var url = $("#RedirectTo").val();

$(document).ready(function () {
    $.ajax({
        dataType: 'json',
        type: 'POST',
        url: '/Controller/Action',
        success: function (result) {
            if (result.UserFriendlyErrMsg === 'Some Message') {
                // display a Prompt
                alert("Message: " + result.UserFriendlyErrMsg);
                // redirect us to the new page
                location.href = url;
            }
            $('#friendlyMsg').html(result.UserFriendlyErrMsg);
        }
    });
</script>
4
Mike Brown
<script type="text/javascript">
    function lnkLogout_Confirm()
    {
        var bResponse = confirm('Are you sure you want to exit?');

        if (bResponse === true) {
            ////console.log("lnkLogout_Confirm clciked.");
            var url = '@Url.Action("Login", "Login")';
            window.location.href = url;
        }
        return bResponse;
    }

</script>
1

以下のコードを確認してください。これはあなたに役立ちます。

<script type="text/javascript">
  window.opener.location.href = '@Url.Action("Action", "EventstController")', window.close();
</script>
0
shahwaiz hasan