2009-08-21 3 views
8

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

Я хочу, чтобы страница обновлялась, чтобы отразить обновления состояния системы, выполненные этими двумя действиями, но 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"); 
} 
+0

Что вы делаете, звучит разумно, и да, результат не имеет смысла. Можете ли вы вставить код двух методов в 2 разных контроллера? –

+0

Добавлен код, как вы просили. Спасибо, Дэвид – Dan

+0

Хмм, да, как не подозревал ничего странного. Посмотрите, что вы думаете о моем ответе ниже ... –

ответ

0

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

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

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

+0

К сожалению, это не проблема. Мой ORM выполнил всю свою работу, и есть другие бит стороны клиента, которые должны появиться в любом случае. – Dan

+0

oh well :-(Если вы действительно застряли, вы можете попробовать Response.Redirect (Request.Url.ToString()), но если это работает, тогда это обходное решение и беспорядочное. –

0

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

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

7

Я предполагаю, что у вас проблемы с кешированием.

Украсьте ActionInControllerB и методы ActionInControllerA с:

[OutputCache(Location=System.Web.UI.OutputCacheLocation.None)] 
1

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

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

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

Смежные вопросы