RedirectToAction не обновляет страницу, как ожидалось - PullRequest
5 голосов
/ 17 декабря 2011

Что я делаю не так с моим кодом MVC здесь?Представление «Индекс» включает в себя форму, которая представляет самому себе, что я хотел бы, чтобы контроллер обработал отправленную форму и затем вернулся в представление.

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

    public ViewResult Index()
    {
        return View(GetComments());
    }


    [HttpPost]
    public ActionResult Index(int[] AllIds)
    {
        if (AllIds != null)
        {
            foreach (int id in AllIds)
            {
               // do stuff
            }
        }

        return RedirectToAction("Index");
    }

Редактировать: При отправке формы точка останова по первому методу не достигается, и при попытке "Step Into (F11)" линия return RedirectToAction("Index"); просто перемещается прямо в финал },

Ответы [ 3 ]

4 голосов
/ 17 декабря 2011

Установите Fiddler или Firebug для Firefox и наблюдайте за трафиком, посмотрите, действительно ли он возвращает новый ответ или HTTP 304 из браузера (кэшированная страница).Если все получилось, значит, у вас проблема с сохранением БД и / или запросами.

1 голос
/ 17 декабря 2011

Вы пробовали это?Мне интересно, в зависимости от того, как вы сохраняете данные, если они не сохраняются до тех пор, пока сервер не вернет ответ ..?

public ViewResult Index()
{ // breakpoint
    var comments = GetComments(); // debug and inspect the value of this variable
    return View(comments);
}


[HttpPost]
public ActionResult Index(int[] AllIds)
{
    if (AllIds != null)
    {
        foreach (int id in AllIds)
        {
           // do stuff
        }
    }

    return RedirectToAction("Index"); // breakpoint
} 

Я знаю, что некоторые люди используют IUnitOfWork в MVC, который вызывает только SaveChanges/ Подтвердить на ORM в конце запроса.Возможно ли, что // do удаляет элементы из коллекции, но не сохраняется в БД до тех пор, пока не будет возвращен индекс GET ()?

Обновление

Вместо возврата RedirectToAction("Index"), вы пробовали RedirectToAction(Index())?

0 голосов
/ 26 мая 2017

Попробуйте также ввести имя контроллера. Это помогло мне. Например:

return RedirectToAction("Index","Home");
...