Вопрос по jquery, asp.net-mvc, javascript, c# – Перенаправление на другую страницу в ASP.NET MVC с использованием JavaScript / jQuery

65

Я хочу перенаправить с одной страницы на другую в ASP.NET MVC 3.0, используя JavaScript / jQuery / Ajax. На событие нажатия кнопки я написал код 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);
}

Когда я нажимаю на кнопку, она вызывает действие Details внутри BranchController, но не возвращается к представлению Details.

Я не получил ни ошибки, ни исключения. Показывает статус 200 OK вподжигатель, Что не так в моем коде и как я могу перенаправить на страницу просмотра сведений?

Ваш Ответ

6   ответов
36

используя скрытую переменную в представлении, а затем используя эту переменную для публикации из кода JavaScript.

Вот мой код в представлении

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

Теперь вы можете использовать это в файле JavaScript как:

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

Это сработало как прелесть для меня. Я надеюсь, что это вам тоже поможет.

скорее: @ Html.Hidden ("RedirectTo", Url.Action ("Редактировать", "WorkFlows", new {id = Model.WorkFlowID})); glenn garson
Это мне очень помогло! Спасибо!!! Я пытался использовать модальное представление для перенаправления страниц в MVC, и изо всех сил. Ценить это. domshyra
Для моей ситуации этот ответ лучше, потому что я хотел получить первичный ключ из модели (т.е. Model.WorkFlowID) для включения в перенаправление. Например: @ Html.Hidden ("RedirectTo", Url.Action ("ActionName", "ControllerName", Model.WorkFlowID)); glenn garson
126

$ .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-адреса, подобные этому. При работе с URL-адресами в приложении ASP.NET MVC всегда следует использовать помощники по URL. Так:

function foo(id) {
    var url = '@Url.Action("Details", "Branch", new { id = "__id__" })';
    window.location.href = url.replace('__id__', id);
}
Разве windows.location.href не делает GET? Если это так, оригинальный вопрос пытается сделать POST. Я удивлен, что это было отмечено как ответ, потому что есть большая разница между ними. Sailing Judo
Спасибо, @ Darin. Я использую URL помощник, как вы предложили, но его ошибка на странице, потому что URL-это что-то вроде этоголокальный / ... Как получить правильный URL от этого помощника. user946393
+1. Последний подход потрясающий. Благодарю. Jhoon Bey
@Sharad, это в отдельном файле javascript? Если это так, вы не можете использовать в нем URL-помощники. Вы могли бы определитьurl как глобальная переменная внутри вашего представления:<script type="text/javascript">var url = '@Url.Action("Details", "Branch", new { id = "__id__" })';</script>, И тогда вы можете использовать его в своем отдельном файле JavaScript. Darin Dimitrov
да, это в отдельном файле JS. Я разместил его на главной странице, и теперь он работает. Большое спасибо @ Darin. user946393
0

проверьте код ниже, это будет полезно для вас:

<script type="text/javascript">
  window.opener.location.href = '@Url.Action("Action", "EventstController")', window.close();
</script>
4
// 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>
8

Вы можете использовать:

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

Но ваш Ajax-код неполон без функций успеха или ошибок.

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

Похожие вопросы