RedirectToAction не обновляет страницу - PullRequest
9 голосов
/ 21 августа 2009

У меня есть сценарий, когда я нахожусь на странице просмотра и вызываю метод действия в контроллере A, который вызывает другое действие в контроллере B через возврат RedirectToAction, и это действие возвращает представление, в котором Im уже включен.

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

Пример:

//user is on A/index, and submits a form that calls this in contoller B
public ActionResult ActionInControllerB()
{
     //do stuff
     return RedirectToAction(ActionNames. ActionInControllerA, ControllerNames.A);
}

public ActionResult ActionInControllerA()
{
     //do stuff
     return View("index");
}

Ответы [ 4 ]

9 голосов
/ 02 сентября 2009

Полагаю, у вас проблемы с кэшированием.

Украсьте ваши методы ActionInControllerB и ActionInControllerA с помощью:

[OutputCache(Location=System.Web.UI.OutputCacheLocation.None)]
1 голос
/ 14 июня 2015

У меня была похожая проблема, но она началась с вызова ajax из файла представления в файл контроллера. Контроллер сделал обновление в БД и затем вызвал RedirecToAction для обновления представления. Но без обновления ... Ни один из ответов выше не помог мне. Единственный способ решить это - использовать другой метод для вызова действия из файла представления:

window.location = "Experiment/DeleteExperiment?experimentId=" + $("#DeleteExperimentButton").val();

С этого момента все действовало так, как я ожидал.

0 голосов
/ 02 сентября 2009

У меня была такая проблема в моем проекте. Возможно, я предполагаю, что вы обновляете свое представление в ActionInControllerB, а затем, когда вы выполняете RedirectToAction, оно очищает это представление. У меня была такая проблема, когда я не обновлялся в своем контроллере GET: а только обновлял в контроллере POST :. Поэтому то, что я хотел показать, не подходило. Поэтому я бы посоветовал вам убедиться, что ваши изменения на дисплее происходят в нужном месте.

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

0 голосов
/ 21 августа 2009

Я собираюсь быть немного расплывчатым здесь, так как я не совсем уверен, но я видел что-то подобное ранее (и никто больше не отвечает). Возможно, проблема в том, что транзакция обновления еще не была обработана или очищена перед перенаправлением. Например, NHibernate иногда ожидает фиксации обновления базы данных, пока я не думаю, что после обработки ответа.

Если это так, то, что бы вы ни делали в контроллере А, вы просто не получаете изменения. Может быть, вы могли бы попытаться как-то принудительно обработать коммит базы данных.

Извините, но это единственная возможность, о которой я могу думать. Вы должны будете надеть свой гугл-фу наряд и повязку на голову!

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