1

我已经为此绞尽脑汁了一天半,我被难住了。

我有一个 Mvc3 站点,并且正在实现一个向导(多步骤表单)。

第一个页面从控制器接收视图模型,并将其序列化为 Javascript。

下面的 post 方法一切顺利:

$('#nextButton').click(function (evt) {
    // Validate the form, if validation passes, submit the form.
    evt.preventDefault();
    var $form = $('form');
    if ($form.valid()) {
        var viewModel = JSON.stringify(model);
        $.post(
            "SampleSubmission/Home/Index",
            { 'viewModel': viewModel }
        );
    }
});

然后它点击下面的控制器动作:

    [HttpPost]
    public ActionResult Index(string viewModel)
    {
        _viewModel = JsonConvert.DeserializeObject<SampleSubmissionViewModel>(viewModel);

        // Save Model to Session.
        Session[SessionViewModel] = _viewModel;

        // If platform Id != null, workflow has already begun.
        if (ModelState.IsValid)
        {
            return RedirectToAction("SystemDetail");
        }
        return View(_viewModel);
    }

    [HttpGet]
    public ActionResult SystemDetail()
    {
        // Page 2- System Details.
        return View(_viewModel);
    }

重定向有效,但没有显示第二页。

如果我查看 Fiddler,页面会按原样返回。

我将模型存储在 Session 中,因为它是一个 Intranet 站点,在任何人说之前:-)

关于如何显示第二页的任何想法?

干杯,

朱尔斯

4

2 回答 2

1

将所有笔记合并为一个答案。

当调用 ajax 操作来创建向导时,处理服务器响应并将其以某种方式附加到 dom 是很重要的。感谢@pilavdzice 发布完整的解决方案。

但是,如果没有 javascript,这种创建向导的方式是不可用的,恕我直言,维护起来更复杂,验证也会更复杂。

根据我的经验,使用多个视图并使用简单帖子的解决方案(如@Darin Dimitrov多步骤注册过程的帖子中所述或 Steven Sanderson MVC2 书中所述)更简单且更强大的解决方案。

于 2012-04-20T16:56:20.053 回答
0

安德烈亚斯上面的评论是正确的。

为了进一步解释,您的页面没有显示任何内容,因为您需要一个 onsuccess 处理程序来获取从您的 ajax 返回的结果并将其显示在您的页面上,您可以执行以下操作:

   $.post(
        "SampleSubmission/Home/Index",
        { 'viewModel': viewModel },
        //onsuccess handler
        function(data) {
             $('#result').html(data);
         };
    );

在您的 HTML 页面中,如果您有:

<div id="result"></div>

无论您传回什么,都将被放入该 div 中。

如果您在尝试此操作后仍然遇到问题,请告诉解释您遇到的问题,我会进一步提供帮助。

于 2012-04-19T22:56:15.013 回答