ASP.net 管理 [HttpPost] 的控制器中的 MVC 问题:渲染布局和页面两次

ASP.net MVC problem in Controller managing a [HttpPost] : renders Layout and Page twice

我在 ASP.net MVC 应用程序中遇到 RedirectToAction 问题

关于我的应用应该做什么的说明:

  1. 在 'Home/AddItem' 网页中,用户在文本框中(在表单中)输入文本
  2. 用户按下 'Save' 按钮
  3. 装饰有[HttpPost]属性的'AddItem'控制器被触发
  4. 在此控制器中,我将填充的模型对象保存到我的 Web 服务
  5. 我想对另一个控制器做一个'return RedirectoAction', 但它不起作用:

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

它实际上呈现了用户填写表单的页面。它留下几个空行。然后我看到一个外国字符串 "Loading" 然后页面 'Home/Index' 被渲染。

并且浏览器中的 URL 包含前一页 (/Home/AddItem) 的 URL 不是我期望的 (/Home/Index)

我试图让我的 'AddItem' 控制器 return 成为 '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();
}

问题是 JQuery 移动插件干扰了新视图的呈现。 我们的前端开发人员迅速将其替换为 Hammer.js 库,然后我们就 运行 了。 (我们需要在我们的网络应用程序中实现触摸手势)