更新模型作为用户走过向导”步骤(updating model as user walks throu

2019-10-17 16:59发布

我将使用智能向导 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调用后获取内容,这似乎是愚蠢的我。

任何人都面临这个问题,还是我错在这里做什么?

Answer 1:

你有没有想过做通过JavaScript将提交(仍然存在),输入来自各个步骤结合起来? 您可以使用从以前的局部视图的信息至N呈现局部图2,但实际数据提交是所有视图数据的组合。我不知道这是不是最好的做法还是不是,但它是一个想法。



文章来源: updating model as user walks through wizard' steps