如何在ASP.NET MVC 2应用程序中实现向导类型页面导航?

时间:2010-07-02 15:12:00

标签: c# asp.net asp.net-mvc asp.net-mvc-2

3 个答案:

答案 0 :(得分:3)

您应该实现强类型视图或控件。在这种类型中定义一个属性,指示您的步骤和其他逻辑。 EX:

public class WizardView
{
     public List<string> Steps { get; set; }
     public int CurrentStepNumber {get;set;}

     public bool ShowNextButton
     {
         get
         {
             return CurrentStepNumber < this.Steps.Count-1;
         }
     }  

     public bool ShowPreviousButton
     {
         get
         {
             return CurrentStepNumber > 0;
         }
     }  
}

你的控制:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<WizardView>" %>


    <table width="100%">
       <tr>    

         <% 
            int index=0;
            foreach(string step in Model.Steps)
            {
            %>   
                <td class='<%=Model.CurrentStep==index?"current":"notcurrent" %> style="width:18%;">
                       <%= step %>
               </td>
           <%
                index++;  
             } %>
        </tr>
</table>

在您的控制器中

public ActionResult MyAction(int step)
{
    return View (new WizardControl {
       Steps = Myrepository.getSteps();
       CurrentStep = step
     });
}

}

答案 1 :(得分:1)

这可能不是您正在寻找的,但如果您使用jQuery来隐藏和显示DIV标签会怎么样。然后,用户将获得向导的体验,而所有内容都在单个视图中。然后使用单个控制器可以很好地处理它

另一种选择可能是为每个向导步骤创建单独的视图“步骤”

http://example.com/page/step/1

然后,您可以创建一个包含所有字段的类对象,并在通过添加到会话对象导航向导时添加到该对象

(Custom.Class.Obj)Session["myWizard"]

这样,它允许您构建标准视图并从会话对象中加载您拥有的信息。

答案 2 :(得分:0)

这是另一种方法 - 扩展WizardView方法。您描述的是状态引擎 - 了解状态,转换以及与每个引擎相关的行为和触发器。

如果您查看无状态(http://code.google.com/p/stateless/)之类的实现,您将看到可以描述状态(向导视图方法中的步骤)以及与每个状态相关联的触发器。根据您的描述,您可以在状态引擎中捕获此信息 - 或者可能由于所有转换都由引擎离散处理而完全忽略它。

更进一步,您的视图连接现在可以变得非常通用。不需要视图就能够了解操作的状态,只需依赖视图模型本身。