 <p>I would recommend posting to the Register method and based on the value of the selected option, redirect to the relevant view to complete the details. The users table could have a (say) <code>IsRegistrationComplete</code> field which is marked as <code>true</code> only when the 2nd form has been saved.</p> <p>To do this in one view, you will need a view model with properties for the <code>Register</code> model, <code>Owner</code> model, <code>ServiceCompany</code> model and selected option.</p> <p>View model</p> <pre><code>public class RegistrationVM { public RegisterVM Register { get; set; } public OwnerVM Owner { get; set; } public ServiceCompanyVM ServiceCompany { get; set; } [Required] public string CompanyType { get; set; } } </code></pre> <p>Controller</p> <pre><code>public ActionResult Register() { RegistrationVM model = new RegistrationVM(); model.Register = new RegisterVM(); return View(model); } public ActionResult Register(RegistrationVM model) { // Either Owner or ServiceCompany properties will be populated } public PartialViewResult CreateOwner() { var model = new RegistrationVM(); model.Owner = new OwnerVM(); return PartialView(model); } public PartialViewResult CreateServiceCompany() { var model = new RegistrationVM(); model.ServiceCompany = new ServiceCompany(); return PartialView(model); } </code></pre> <p>Notes: The partial views should not contain a <code>&lt;form&gt;</code> element (it will be inserted inside the <code>&lt;form&gt;</code> tag of the main view). The model in the partial views needs to be <code>RegistrationVM</code> so the controls are correctly prefixed and can be bound on post back (e.g. <code>&lt;input name="Owner.SomeProperty" ../&gt;</code> etc)</p> <p>View</p> <pre><code>@model RegistrationVM @using(Html.BeginForm()) { &lt;section&gt; // render controls for the register model &lt;section&gt; &lt;section&gt; @Html.RadioButtonFor(m =&gt; m.CompanyType, "owner",new { id = "owner" }) &lt;label for="owner"&gt;Owner&lt;/label&gt; @Html.RadioButtonFor(m =&gt; m.CompanyType, "service",new { id = "service" }) &lt;label for="service"&gt;Service Company&lt;/label&gt; @Html.ValidationMessageFor(m =&gt; m.CompanyType) &lt;button id="next" type="button"&gt;Next&lt;/button&gt; &lt;section&gt; &lt;section id="step2"&gt;&lt;/section&gt; &lt;input id="submit" type="submit" /&gt; // style this as hidden } </code></pre> <p>Then add a script to handle the <code>Next</code> button which validates the existing controls, gets the value of the selected service, uses ajax to load the relevant form, re-parses the validator and displays the submit button</p> <pre><code>var form = $('form'); $('#next').click(function() { // Validate what been entered so far form.validate(); if (!form.valid()) { return; // correct errors before proceeding } // Get selected type and update DOM var type = $('input[name="CompanyType"]:checked').val(); if (type == "owner") { $('#step2').load('@Url.Action("CreateOwner")'); } else { $('#step2').load('@Url.Action("CreateServiceCompany")'); } // Re-parse validator so client side validation can be applied to the new controls form.data('validator', null); $.validator.unobtrusive.parse(form); // Show submit button $('#submit').show(); }); </code></pre>