答案 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/)之类的实现,您将看到可以描述状态(向导视图方法中的步骤)以及与每个状态相关联的触发器。根据您的描述,您可以在状态引擎中捕获此信息 - 或者可能由于所有转换都由引擎离散处理而完全忽略它。
更进一步,您的视图连接现在可以变得非常通用。不需要视图就能够了解操作的状态,只需依赖视图模型本身。