RedirectToAction не меняет URL или не переходит к представлению индекса - PullRequest
30 голосов
/ 09 февраля 2010

Я попытался использовать RedirectToAction после того, как сделал сообщение для контроллера и сохранил его, но URL-адрес не изменился, и перенаправление не работает. Мне нужно добавить, что редирект вводит метод действия контроллера при отладке. Он не изменяет URL-адрес и не переходит к представлению Index.

public ViewResult Index()
{
    return View("Index", new TrainingViewModel());
}

public ActionResult Edit()
{
    // save the details and return to list
    return RedirectToAction("Index");    
}

Что я делаю не так?

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.IgnoreRoute("{resource}.js/{*pathInfo}");
    routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = "" } // Parameter defaults
    );
}

jQuery звонки:

this.SynchValuesToReadOnly = function() {
    window.location = $('#siteRoot').attr('href') + 'Sites/';           
};

this.OnSiteEdit = function() {
    // post back to the server and update the assessment details    
    var options = {
        target: '',
        type: 'post',
        url: '/Site/Edit',
        beforeSubmit: othis.validate,
        success: othis.SynchValuesToReadOnly
    };

    $('#uxSiteForm').ajaxSubmit(options);
};

Ответы [ 8 ]

74 голосов
/ 09 февраля 2010

Код, который вы показываете, верен. Мое предположение состоит в том, что вы не выполняете стандартный POST (например, перенаправления не работают с AJAX-публикацией).

Браузер будет игнорировать ответ перенаправления на AJAX POST. Вы можете перенаправить в скрипте, если вам нужно перенаправить, когда вызов AJAX возвращает ответ о перенаправлении.

7 голосов
/ 24 января 2012

Вам необходимо добавить «return false;» до конца вашего события JavaScript onclick. Например:

Код бритвы

@using (Html.BeginForm())
{
    @Html.HiddenFor(model => model.ID) 
    @Html.ActionLink("Save", "SaveAction", "MainController", null, new { @class = "saveButton", onclick = "return false;" })
}

Код JQuery

$(document).ready(function () {
        $('.saveButton').click(function () {
            $(this).closest('form')[0].submit();
        });
    });

C #

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SaveAction(SaveViewModel model)
{
    return RedirectToAction("Index");
}
5 голосов
/ 03 апреля 2015

Я только что столкнулся с этой проблемой, и у меня ничего не получалось.Оказалось, что контроллер, который я перенаправлял на требуемую авторизацию - атрибут [Authorize] предотвращал любое перенаправление.

[Authorize]//comment this out
public class HomeController : Controller {...}

В будущем или в крупных проектах это может быть нежелательным решением, но еслиЕсли вы ищете простое перенаправление или запуск, это может быть решением для вас.

3 голосов
/ 09 февраля 2010

Проверьте с помощью firebug. Сообщение может возвращать ошибку сервера.

2 голосов
/ 14 марта 2017

Это немного поздно ... но у меня была такая же проблема в MVC5. У меня было 2 действия с одинаковым именем, что достаточно часто. Я не получил никаких ошибок, которые я мог бы зафиксировать в Application_Error или OnException в контроллере. Я попытался добавить в действие, контроллер, область в переменной маршрута RedirectToAction безрезультатно. Я переименовал действие POST в EditPost, и теперь у меня все работает. Надеюсь, это поможет.

public ActionResult Edit(int id)
{
    return View();
}

[HttpPost, ValidateAntiForgeryToken]
public ActionResult Edit(MyInputModel myInputModel)
{
    return View();
}

public ActionResult Create()
{
    return RedirectToAction("Edit", new {id = 1});
}
2 голосов
/ 05 февраля 2014

Попробуйте, как показано ниже:

возврат в вашем действии:

return Json(Url.Action("Index", "Home"));

и в вашем ajax:

window.location.href

1 голос
/ 10 февраля 2019

Я решил написать этот комментарий как новый ответ, потому что я думаю, что он нуждается в дополнительном описании, и, возможно, кто-то не сможет увидеть его в комментариях, если у меня возникнут проблемы. Поэтому я прошу прощения, если вы думаете, что это не ответ и должен быть написан в разделе комментариев.

В некоторых случаях я использовал RedirectToAction, чтобы отправить пользователя другому действию, если введенные значения неверны или недостаточны, и избежать продолжения текущего процесса, как показано ниже:

if (inputValues == null)
{
  RedirectToAction("index");
}

Это не работает и продолжает текущий процесс, чтобы принять необработанную ошибку. Я ищу и читаю некоторые статьи, но не могу найти решение. Вызов RedirectToAction не из кода Ajax, и маршрутизация настолько проста даже без каких-либо параметров. Так почему не работает? Наконец, я обнаружил простую ошибку: забыл поставить ключевое слово return <1007 * перед RedirectToAction. Я изменил код, как показано ниже: </p> if (inputValues == null) { return RedirectToAction("index"); } И это работает. Надеюсь, что это поможет.

0 голосов
/ 27 июня 2019

Я только что столкнулся с этой проблемой, и у меня ничего не получалось. Оказалось, что контроллер, который я перенаправлял на требуемую авторизацию - атрибут [Authorize] предотвращал любое перенаправление

   [Authorize]//comment this out
   public class HomeController : Controller {...}

Потому что я забыл добавить app.UseAuthentication () в блок кода в Startup.cs.

   public void Configure(IApplicationBuilder app, IHostingEnvironment env)
   ...
   app.UseHttpsRedirection();
   app.UseStaticFiles();
   app.UseAuthentication();
   app.UseMvc(routes =>
   ...

После добавления редирект начал работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...