1

I am developing an MVC3 application using Visual Studio 2010.

I have an aspx page that I want to display as a result of a controller action.

I added this action to the home controller.

// GET: /Home/EmployeePortal
        public ActionResult EmployeePortal()
        {
            return View();
        }

This is the aspx page.

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>

<!DOCTYPE html>

<html>
<head runat="server">
    <title>EmployeePortal</title>
</head>
<body>
     <asp:TextBox ID="TextBox1" runat="server" />
    <div>
        This is employee portal
    </div>
</body>
</html>

When I run the application, I am able to navigate to this page by using the url: http://localhost:3990/Home/EmployeePortal

The problem is - When I have one or more server side control on the aspx page, I get this error on the website. Sorry, an error occurred while processing your request.

When I comment out the server side control from the page, it displays fine.

The aspx page was added as a view to the application via add new view menu.

I need an aspx page integrated into the MVC application and thats why I am trying to use this aspx page.

I am not sure what I am doing wrong. Please help.

user1069683
  • 19
  • 1
  • 3

2 Answers2

7

You don't use server side controls in ASP.net MVC.

You use the HTML Helper methods:

<%= Html.TextBox("TextBox1") %>

The server-side controls are not supported in MVC because MVC does not have the concept of ViewState.

Edit:

If you need to integrate MVC and WebForms, then you will need to create standalone Web Form pages. These will not be "Views" in your MVC application. You can then create routes to these web form pages by doing the following in your Global.asax:

public static void RegisterRoutes(RouteCollection routes) {
    routes.MapPageRoute(
        "WebFormProducts",
        "/products/{category}",
        "~/WebForms/Products.aspx"
    );
}

Now when you go to /products/beverages it will actually go to your Products.aspx page that lives in the WebForms folder.

You create this Products.aspx file the same as a normal webforms page. The disadvantage to this (if nothing has changed) is you can not share a Master page / Layout page so you will have to duplicate any layout and create a .master to make the pages look similar.

Dismissile
  • 32,564
  • 38
  • 174
  • 263
  • I need to integrate a few legacy aspx pages into the new application. Thats why I was trying to include server side controls. – user1069683 Nov 28 '11 at 16:20
  • I tried the steps as you mentioned in your updated post. Added the route map and the page. I do not have a products controller and so I am getting an http 404 error. I'll continue to try a few things. – user1069683 Nov 28 '11 at 20:05
  • 1
    Make sure your page route occurs before the default route, or else your default route will take precedence. – Dismissile Nov 28 '11 at 20:12
  • Thanks again for your prompt response. This is how my RegisterRoutes method looks like: routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapPageRoute("WebFormProducts", "Home/EmployeePortal", "~/Webforms/Products.aspx"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults ); The problem is - now all my actions are being routed to the products.aspx dummy page. How do I fix this? – user1069683 Nov 28 '11 at 20:29
  • It's been a while since I have done this, but if I remember correctly (which is a stretch) but I thought I had troubles using a Page Route that didn't have some configurable section in it. What I mean is, I could not get it to work when I did: /products/beverages but it did work when I did /products/{category}. Try changing the routes to have something passed in via {}. It `might` work, but I'm not sure if that's the issue. – Dismissile Nov 28 '11 at 20:33
  • Reformatting my previous message: Thanks again for your prompt response. This is how my RegisterRoutes method looks like: routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapPageRoute("WebFormProducts", "Home/EmployeePortal", "~/Webforms/Products.aspx"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults ); The problem is - now all my actions are being routed to the products.aspx dummy page. How do I fix this? – user1069683 Nov 28 '11 at 20:34
  • You are correct. I changed the route to: routes.MapPageRoute("WebFormProducts", "Home/EmployeePortal/{id}", "~/Webforms/EmployeePortal.aspx"); When I pass http://localhost:3990/Home/EmployeePortal/1, I get the aspx page. This does not mess up my existing controller actions. Thanks a bunch for your help. – user1069683 Nov 28 '11 at 20:40
0

Easy way to use aspx page on mvc controller for rdlc view

public ActionResult RdlcReport( )
{
    IHttpHandler page = (IHttpHandler)System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath("~/Report/ReportDataViewer.aspx", typeof(Page));
    HttpApplication controllerContextHttpContextGetService = (HttpApplication)ControllerContext.HttpContext.GetService(typeof(HttpApplication));
    page.ProcessRequest(controllerContextHttpContextGetService.Context);
    return new EmptyResult();
}
Pang
  • 9,564
  • 146
  • 81
  • 122