My answer based on SLAks response - I'm archiving this for later reference or to help someone else.
This is my structure:
1) Create.aspx (ViewPage) uses RenderPartial("Tab-CreateEditForm") to render the create/edit form, which is
2) Tab-CreateEditForm.ascx (the partial)
3) Create action that detects what kind of request is being made. If we are making AJAX request we probably don't want to render Create.aspx which is by default and instead rather render Tab-CreateEditForm because it contains only the form tag and fields and NO page directives, head, title and all the other elements that are in Create.aspx.
So the action looks like this:
//
// GET: /Tab/Create/{tabGroupSlug}
[CanReturnModalView]
[Authorize(Roles = "Administrators")]
public ActionResult Create(string tabGroupSlug)
{
Tab tab = new Tab();
if (Request.IsAjaxRequest())
return View("Tab-CreateEditForm", tab); // returns partial
return View(tab); // returns Create.aspx
}
And this is my Edit action which also uses the same technique because the Edit View (Edit.aspx page) also uses the same editing partial control.
//
// GET: /Tab/Edit/{slug}
[CanReturnModalView]
[Authorize(Roles = "Administrators")]
public ActionResult Edit(string slug)
{
Tab editing = (Tab) _repository.GetInstance(slug);
if (Request.IsAjaxRequest())
return View("Tab-CreateEditForm", editing); // returns partial
return View(editing); // returns Edit.aspx
}