听起来您对下一步的 AJAX 请求正在点击将您重定向到新页面的控制器操作。这很好,通过将所有相关信息发送回控制器为每个步骤保持服务器代码无状态也很好。但是,这样做意味着您无法使用自定义错误页面,并且您将无法使其与您的设置正常工作。
我的建议:朝着真正的 SPA 迈进。当我访问 Step1 时,控制器应该发回整个页面(就像你正在做的那样)。让我们假设这个页面有一个像<div id="step-container"> ... HTML for each step is in here ... </div>
.
现在,当您单击按钮继续执行第 2 步时,不要点击期望重定向到新页面的控制器操作,而是发送 AJAX 请求以获取包含第 2 步内容的部分视图。
在服务器上,将您Step2.cshtml
的常规视图更改为部分视图(您可以创建一个新视图并单击“部分视图”复选框),为了惯例,您可能应该将其重命名为_Step2.cshtml
. 在您的 Controller actionpublic ActionResult Step2(... data)
中,您可以将您的 return 语句更改为return PartialView("_Step2")
,但保留它就return View("_Step2")
可以了。
现在是重要的部分,客户。在这里,您正在为该部分视图发出 AJAX 请求。
// Set the data from your form in this variable
var data = { };
// Issue a GET request out to the controller action. Make sure the URL is right
$.get('/Steps/Step2', data)
.done(function(result) {
// This promise will execute when we get the content of the Partial View back from the server
// The result variable should have the HTML for the view
// Use jQuery to set the content in your step div to the new HTML
$('#step-container').html(result);
})
.fail(function(error) {
// This promise function will execute if there is an error in the Controller
// and it returns something other than a 200 type response code
// Handle the error here, maybe showing a dialog or trying to fix the error
alert('Sorry, form submission failed');
});