意外调用同一行动

时间:2013-04-19 01:46:37

标签: asp.net asp.net-mvc asp.net-mvc-routing

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

  1. 第1页是问题1 - >提交表单并返回 Page 2的视图
  2. Page 2 是问题2 - >提交表单并返回 Page 3的视图
  3. Page 3 是最后一个问题 - >提交以完成处理
  4. 在每个表单提交后,我希望下一页的视图显示并相应地提交。但是,当我点击提交按钮时,实际发生的事情是 Page 1 显示 Page 2的视图,但现在我正在使用第2页,我点击该页面上的提交,称其为第1页 HttpPost的操作。

    什么会导致 Page 2's 提交以致电第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的{​​{1}}。

    有什么想法吗?

1 个答案:

答案 0 :(得分:1)

之所以发生这种情况,是因为当您使用mvc的BeginForm HTML帮助程序时,它会提交给 渲染操作,而不是与视图名称相等的操作,但您可以修复它!

两个选项:

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

@BeginForm("Page3", "controllerName")

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

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

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