I agree with TokenMacGuy but sometimes that may not viable.
In that case you are going to need to create custom classes in say your controller that your view can bind to. Then as you submit the page you can use UpdateModel to get the values and redirect to another action passing in either the model again to fill in more details, or a new model for that view.
Let's assume you have a two page wizard. Both Views inherit from <MyApp.Controllers.Wizard>
.
In your controller you have a class Wizard which may look like this;
public class Wizard
{
string FirstName {get;set;}
string LastName {get;set;}
string eMail {get;set;}
}
eMail is captured in step 2 of your wizard.
At step 1 you have two fields names FirstName and LastName and on the postback you simply use UpdateModel(Wizard object) to get the values in.
This model does have an issue now in that you'll need to pass the whole model to View 2 including the data that's not required from view 1. On the post back of View 2 you then do UpdateModel(Wizard object) again to get the 1st 2 fields and then the email.
FirstName and LastName in the 2nd view might be in hidden fields.
That's 1 way and really not the best now that I see it on screen. You could save each step out to a state service so you don't pass back all the data each time which would make it cleaner.
JamesShannon's idea is also great. Wizards are so outdated I think unless you are in a buy online scenario.
What you can do is use JavaScript to hide and show elements of the wizard so that all entry fields are on the same page. This can be quite effective if you have a scrolling animation to open the next section as you finish the previous section. <= hope that makes sense.
<script src="/Scripts/jquery-1.3.2.js"></script>
<script>
$(document).ready(function() {
$("#addComment").click(function() {
if ($("#divStep2").is(':visible')) {
$("#divStep2").slideUp(300);
} else {
$("#divStep2").slideDown(300);
}
});
});
</script>
The code above will toggle animate a section open and closed as you click on it. This does require JS to be active on the client machine of course so you may want all the sections to be open by default and then use JS to close them on page entry.
if you do that then if the user does have JS they'll see nice animations and if not then they will at least still see all sections and life will be good.
JS would be the best approach me thinks as you don't need to pass irrelevant data to each view and you don't need to save data out to some state service which you might need to clean up if people simply click away from your site 1/2 way through.
Hope this helps.