如何使用后退按钮支持创建ASP.NET MVC向导?

时间:2009-02-26 13:47:14

标签: jquery asp.net-mvc

我正在使用ASP.NET MVC创建一个应用程序,我需要在我的一个页面上使用向导样式界面。

这是我到目前为止所做的事情:
我创建了一个包含5个div的页面。所有在css文件中都设置了“display:none”。当用户第一次点击页面时,我使用jquery显示第一步:

$("#callStep1").show();

第一步有一个选择列表,当用户做出选择时,执行以下代码:

$("#callStep1").hide();
$("#callStep2").show();

这一直持续到用户进入步骤5并单击提交按钮。一切都工作得很好,除非我在第2,3,4,5步并点击后退按钮,它一直带我回到我之前的页面,当时我真的只想进入上一步。

我该如何使这项工作?我看过一些使用“#”并在页面上创建链接的例子,但不确定是否有更好的方法。

有什么建议吗?

2 个答案:

答案 0 :(得分:4)

  

在a中实现Ajax驱动的链接   完全不引人注目且容易接近   方式(也称为Hijax)用   支持浏览器的后退/前进   导航按钮和书签。   增强可比的DHTML驱动链接   同样。

http://www.stilbuero.de/jquery/history/#Chapter_3

Hijax (wikipedia)

答案 1 :(得分:4)

如果您在向导页面上并不完全需要AJAX,则可以通过在成功的表单POST后返回不同的视图来执行此操作。

在控制器中:

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult DoSomethingLong(int somethingId, int step)
{
  MyModelType myModel = MyModelFactory.Fetch(somethingId);

  switch(step)
  {
    case 1:
      return View("Step1", myModel);
      break;
    case 2:
      return View("Step2", myModel);
      break;
  }
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult DoSomethingLong(int somethingId, int step)
{
   MyModelType myModel = MyModelFactory.Fetch(somethingId);

   if (TryUpdateModel(myModel))
   {
       //Successful update.  Send to next step.
       return RedirectToAction("DoSomethingLong", new {somethingId = somethingId, step = step + 1}
   }
   else
   {
       //Update failed, redisplay current View with validation errors.
       return View(myModel);
   }
}