I have an asp.net Webforms website that I'm trying to integrate MVC to. I'm almost there, but I'm having some problems.

What I did so far:

Added references to:

  • System.Web.Routing
  • System.Web.Abstractions
  • System.Web.Mvc

Updated the root Web.config to load the three assemblies at run time.

Added directories:

  • Views
  • App_Code\Controllers

Updated the Global.asax and configured routing:

protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();       
        RegisterRoutes(RouteTable.Routes);
    }

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
        routes.MapRoute(
           "Default",
           "{controller}/{action}/{id}",
           new { controller = "Home", action = "Index", id = "" }           
            );
    }

So far so good.
I right-click the Controllers folder, add a "HomeController", like this, run the website and it works!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

public class HomeController : Controller
{
    public string Index()
    {
        return "This is my <b>default</b> action...";
    }
    public string Welcome()
    {
        return "This is the Welcome action method...";
    }    
}

Now the problem:

I update the HomeControler to use a View, like this, but it doesn't work.

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }  
}

To create the view, I created a directory inside "Views" called "Home". Inside "Home" I added a new "Empty Page (Razor v3)", called "Index.cshtml":

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>View Template!</p>

The first problem is with this line:

ViewBag.Title = "Index";

VS indicates that "The name 'ViewBag' does not exist in the current context

The second problem is that when I run the website, I get the following error message:

The view 'Index' or its master was not found. The following locations were searched:
~Views/Home/Index.aspx
~Views/Home/Index.ascx
~Views/Shared/Index.aspx
~Views/Shared/Index.ascx

I know it is possible to integrate a Webforms website with MVC pages.
It appears like my configuration is correct. I can successfully add a Controller and get the desired result.
BUT, how do I get my Controller to use a View?

Related posts

Recent Viewed