将ASP.NET MVC混合到ASP.NET WebForms中

时间:2009-11-20 20:14:32

标签: asp.net asp.net-mvc iis asp.net-mvc-routing

出于某种原因,我的路由忽略了任何访问我的MVC页面并简单地给我404的尝试。我有一个WebForms应用程序设置如下:

虚拟目录:事物

所以我通常会这样访问我的网站:

我的ASP.NET WebForms应用程序的原始结构镜像文件系统,所以我有完整的.aspx文件夹,我需要能够像这样使用它们。出于某种原因,当我尝试使用MVC路由访问页面时,例如:

我刚收到404错误。我已经使用了ASP.NET MVC,我知道即使我没有正确设置我的文件夹,我也不会得到404.我会得到无法找到页面的原因并提示文件应该在哪里。以下是我的路由信息​​。我哪里错了?

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

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

1 个答案:

答案 0 :(得分:2)

您能告诉我您运行的是什么操作系统以及该网站是否在VS.NET Web Dev服务器或IIS下运行?

MVC中的路由将请求定向到Controller类,然后定向特定的Action方法。你有一个名为HomeController的类,其方法名为Index?

假设你有一个看起来像这样的控制器......

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

...那么你提到的网址应该可行。但是,ASP.NET MVC希望在vdir下的名为Views \ Home或Views \ Shared的文件夹中找到与Home控制器关联的任何视图。在这种情况下,对于Index操作,它将期望找到名为Index.aspx(或.ascx)的视图。但是,缺少视图通常不会导致404 - 这通常是由于找不到控制器,找不到操作方法,或者在IIS 6上,asp.net管道不在vdir的通配符设置中。 / p>

<强>更新

您确定您的web.config具有MVC HttpHandler(因此MVC位于ASP.NET管道中)。你应该有这样的东西......

<add verb="*" path="*.mvc" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

...在您的httpHandlers部分和此...

<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

...在web.config的“httpModules”部分中。

更新2:

根据您的评论我怀疑您没有在管道中获得ASP.NET MVC代码。您应该使用web.config并将其与新创建的MVC站点中的一个进行比较,并查找缺少的配置项。我上面提了几句,但可能会有更多。