Ajax发布后未显示Mvc3目标页面

时间:2012-04-15 10:58:48

标签: jquery ajax asp.net-mvc-3

我绞尽脑汁待了一天半,我很难过。

我有一个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站点,在任何人说: - )之前

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

干杯,

2 个答案:

答案 0 :(得分:1)

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

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

然而,如果没有javascript和imho更复杂的维护,这种创建向导的方式是不可用的,验证会更复杂。

根据我的经验,使用多个视图并使用简单帖子的解决方案(如@Darin Dimitrov multi-step registration process中的帖子所述或Steven Sanderson MVC2书中所述)更简单,更强大。

答案 1 :(得分:0)

Andreas上面的评论是正确的。

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

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

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

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

无论你传回的是什​​么,都会被放入那个div。

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