ASP.net MVC проблема в контроллере, управляющем [HttpPost]: рендеринг Layout и Page дважды - PullRequest
0 голосов
/ 31 октября 2018

У меня проблема с RedirectToAction в приложении ASP.net MVC

Объяснение того, что должно делать мое приложение:

  1. На веб-странице «Home / AddItem» Пользователь вводит текст в текстовое поле (в форме)
  2. Пользователь нажимает кнопку «Сохранить»
  3. Сработал контроллер 'AddItem', который украшен атрибутом [HttpPost]
  4. В этом контроллере я сохраняю заполненный объект-модель в моем Web Сервис
  5. Я хочу выполнить «возврат RedirectoAction» на другой контроллер, но это не работает:

    return RedirectToAction («Домой», «Индекс»);

Фактически отображает страницу, на которой пользователь заполнял форму. Оставляет пару пустых строк. Затем я вижу иностранную строку «Загрузка», после чего отображается страница «Домой / Индекс».

И URL-адрес в браузере содержит URL-адрес предыдущей страницы (/ Home / AddItem), а не тот, который я ожидаю (/ Home / Index)

foreign string 'Loading' appears in the page sketch of the problematic view inside a view

Я пытался заставить мой контроллер «AddItem» возвращать представление «AddItem», но возникает та же проблема: прежняя страница находится вверху страницы, и к ней добавляется дублирующаяся страница «AddItem» !!

Я пробовал RedirectToURL, RedirectToRoute и т. Д. Безрезультатно !! Единственное, что заставляет RedirectToAction («Home», «Index») работать, это не рендерить представление «AddItem» в макет. Но это не решение для нашего проекта !!

Вот фрагменты кода моей страницы _ViewStart.cshtml и контроллера AddItem:

_ViewStart.cshtml

@{
    if (this.ViewContext.RouteData.Values["controller"].ToString() == "Login") {
        Layout = "~/Views/Shared/_LayoutLogin.cshtml";
    }
    else {
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
}

[Authorize]
  public ActionResult AddItem(DateTime? date) {
      if (!ValidateUserAuthentication(out User user)) {
          return Redirect("~/Login/Login");
      }

      ViewBag.CurrentDayOfWeek = myService.GetCurrentDayOfWeek();

      return View();
  }

[HttpPost]
public ActionResult AddItem(Transaction myTransaction) {

   // code that saves 'myTransaction' via my  Web Service

   // to make things simple, I return the 'AddItem' view
   // but it doesn't work : it appends a new view to the former view

    return View();
}

1 Ответ

0 голосов
/ 08 ноября 2018

Проблема заключалась в том, что мобильный плагин JQuery мешал отображению нового представления. Наш разработчик веб-интерфейса быстро заменил ее на библиотеку Hammer.j s, и мы уже в работе. (Нам нужны сенсорные жесты, реализованные в нашем веб-приложении)

...