我将使用智能向导 jQuery插件创建一个精灵般的ASP.Net MVC应用程序。 用户将经过多个步骤填写数据。
[EDITED为了清楚]
每一步都应该是一个局部视图。
该视图模型是通用于所有浏览次数:
public class myViewModel
{
[Required]
public int BM { get; set; }
[Required]
public int Cylindre { get; set; }
}
在第一部分视图应该显示领域的BM(这里当然我已经简化事情清晰度):
@model MvcApplication3.Models.QuoteViewModel
<div class="editor-label">
@Html.LabelFor(model => model.BM)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.BM)
@Html.ValidationMessageFor(model => model.BM)
</div>
所述第二部分视图应显示字段Cylindre(相同的代码,上文)。
现在主要的景观看起来像这样:
@model MvcApplication3.Models.QuoteViewModel
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<div id="wizard" class="swMain">
<ul>
<li><a href="#step-1">
<label class="stepNumber">
1</label>
<span class="stepDesc">Step 1<br />
</span></a></li>
<li><a href="#step-2">
<label class="stepNumber">
2</label>
<span class="stepDesc">Step 2<br />
</span></a></li>
</ul>
<div id="step-1">
<h2 class="StepTitle">
Step 1 Content</h2>
<!-- step content -->
@Html.Partial("QuoteStep1", Model)
</div>
<div id="step-2">
<h2 class="StepTitle">
Step 2 Content</h2>
<!-- step content -->
@Html.Partial("QuoteStep2", Model)
</div>
</div>
}
这一切工作正常。 但正如你所看到的,局部视图都在同一时间呈现。
我想要做的,就是加载第一部分视图,然后当上了下一步的用户移动时,第二部分视图将使用AJAX调用加载。
问题是我如何保持模型的状态通过步骤?
[编辑2 -新版本]
我已经成功地加载使用AJAX调用的部分意见:
$('#wizard').smartWizard({ contentURL: '/home/getstep', transitionEffect: 'slideleft', onLeaveStep: leaveAStepCallback, onFinish: onFinishCallback });
而在控制,我做的:
public ActionResult GetStep()
{
ActionResult pv = null;
switch (Convert.ToInt16(Request["step_number"]))
{
case 1:
pv = PartialView("QuoteStep1");
break;
case 2:
pv = PartialView("QuoteStep2");
break;
default:
break;
}
return pv;
}
现在我遇到的问题是,当我打的SmartWizard的下一个按钮,我的控制器竟然打我就算不填写必填字段! 这是因为智能向导插件似乎是在做验证的AJAX调用后获取内容,这似乎是愚蠢的我。
任何人都面临这个问题,还是我错在这里做什么?