我有一个相当大的 ASP.NET 网站(不是 Web 应用程序),并且想向其中添加 MVC3。我没有选择更改项目类型,所以我不得不使用网站(asp.net 4.0)。
我使用一个单独的 MVC 项目,但不是作为它自己的 Web 应用程序,而是作为我旧网站中的一个程序集。
以下是我所做的简要说明:
在 Application_Start 我们需要:
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
然后添加常用的路由方法:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// your routes
}
接下来在您网站的 web.config 中添加一些内容。在编译下的 system.web 中,我们需要以下程序集:
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
最初,我还向 web.config 添加了一些 MVC 命名空间,但没有它们似乎也能正常工作。
您现在确实在网站的 Global.asax 中创建新路由,然后在 MVC 项目中添加相应的控制器,然后返回网站为其添加视图。所以你的逻辑都在一个程序集中,而视图和路由是在网站中定义的。
您仍然可以通过在其中设置断点来调试 MVC 控制器,但您可以通过启动网站进行调试。
如果您使用 MVC 的建议默认路由:
routes.MapRoute("Default", "{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
对 www.mysite.com 的调用将提供主控制器/视图的内容,而不是您的旧 default.aspx 主页,所以我只是不使用这样的路由。如果您的路由与现有的物理文件夹和文件发生冲突,请在路由上使用带有正则表达式的约束来排除此类冲突。
尽管我在网站中使用母版页,但公共页面部分的实际 html 是由另一个程序集中的代码创建的。我可以从我的 _ViewStart.cshtml 或我的基本控制器中调用相同的方法。
到目前为止,我还没有看到任何关于这种方法的真正负面影响。