0

此 ASP.NET MVC 应用程序的布局如下所示(这是一个移动 Web 应用程序):

  1. 第1页是第1个问题 -> 提交表格并返回第2页的视图
  2. 第 2 页是问题 2 -> 提交表单并返回第 3 页的视图
  3. 第 3 页是最后一个问题 -> 提交以完成处理

在每个表单提交后,我希望下一页的视图会出现并相应地提交。但是,当我点击提交按钮时,真正发生的事情是在第 1 页上,它显示了 第 2 页的视图,但是现在我在第 2 页上并且我在该页面上点击了提交,它调用了第 1 页的 HttpPost操作。

什么会导致第 2 页的提交调用第 1 页的 HttpPost操作?

这是我正在做的事情的基本想法:

public ActionResult Index()
{
    return View();
}

[HttpPost]
public ActionResult Index(MyModel myModel)
{
    return View("Page2", myModel);
}

[HttpPost]
public ActionResult Page2(MyModel myModel)
{
    return View("Page3", myModel);
}

[HttpPost]
public ActionResult Page3(MyModel myModel)
{
    if (ModelState.IsValid)
    {
        // do something and complete
    }

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

这显然过于简单化了,但你应该明白这一点。的Page2视图得到渲染没有问题。但是在那个页面上,当点击提交按钮时,它会直接回到HttpPost.Index()

有任何想法吗?

4

1 回答 1

1

发生这种情况的原因是,当您使用 mvc 的BeginFormHTML 帮助程序时,它会提交给呈现操作,而不是提交给与视图名称相同的操作,但您可以修复它!

两种选择:

首先:在 HTML 帮助器中设置控制器和操作的值:

@BeginForm("Page3", "controllerName")

第二:重定向到动作而不是返回视图:

[HttpPost]
public ActionResult Index(MyModel myModel)
{
    return RedirectToAction("Page2", myModel);
}

[HttpPost]
public ActionResult Page2(MyModel myModel)
{
    return RedirectToAction("Page3", myModel);
}
于 2013-04-19T01:55:52.803 回答