Found the issue in your Global.ascx.cs file, The following below line wrong, it should register your PageController class not MvcApplication class
builder.RegisterControllers(typeof(MvcApplication).Assembly);
Corrected Global.ascx.cs file
public class MvcApplication : System.Web.HttpApplication
{
ILifetimeScope BuildContainer()
{
var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(PageController).Assembly);
builder.UseDD4T();
return builder.Build();
}
protected void Application_Start()
{
var builder = BuildContainer();
DependencyResolver.SetResolver(new AutofacDependencyResolver(builder));
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}
In DD4T 2 - Instead of TridionControllerBase you can also use ModelControllerBase for View Model Build using ViewModelFactory
public class PageController : ModelControllerBase
{
public PageController(IPageFactory pageFactory, IComponentPresentationFactory componentPresentationFactory,
ILogger logger, IDD4TConfiguration config, IViewModelFactory viewModelFactory)
: base(pageFactory, componentPresentationFactory, logger, config, viewModelFactory)
{
}
public ActionResult Page(string url)
{
url = !url.StartsWith("/") ? "/" + url : url;
IPage page = GetPage(url);
if (page == null) {
//TODO return 404 not found page
}
var pageViewModel = ViewModelFactory.BuildViewModel(page);
return View(GetViewName(page), pageViewModel);
}
}
I hope it helps to fix your issue.